Я пытаюсь использовать сложные типы объектов в привязке модели ASP.NET MVC. Мне нужно вставить и обновить записи студента с результатами экзамена
public class InitialApplicantLevel2Model
{
public InitialApplicantLevel2Model()
{
alResults = new ALResults();
}
public int InitialApplicantLevel2ID { get; set; }
public int? IntakeID { get; set; }
public string ApplicantName { get; set; }
public string ContactNumber { get; set; }
public string School { get; set; }
public string NIC { get; set; }
public string Passport { get; set; }
public string Sex { get; set; }
public ALResults alResults { get; set; }
}
public class ALResults
{
public int ResultsID { get; set; }
public int InitialApplicantLevel2ID { get; set; }
public string Stream { get; set; }
public string Grading { get; set; }
public string IndexNo { get; set; }
public int? Year { get; set; }
public int? Attempt { get; set; }
public double? ZScore { get; set; }
public string Medium { get; set; }
}
Класс репозитория Создать новую запись
public bool Create(InitialApplicantLevel2Model model)
{
try
{
using (context = new SIMSDBAPPEntities())
{
using (TransactionScope scope = new TransactionScope())
{
tblInitialApplicantLevel2 tb = new tblInitialApplicantLevel2();
tb.NIC = model.NIC;
tb.Passport = model.Passport;
tb.Sex = model.Sex;
context.tblInitialApplicantLevel2.Add(tb);
tblALResult results = new tblALResult();
results.Attempt = model.alResults.Attempt;
results.Grading = model.alResults.Grading;
results.IndexNo = model.alResults.IndexNo;
results.InitialApplicantLevel2ID = tb.InitialApplicantLevel2ID;
results.Stream = model.alResults.Stream;
results.Year = model.alResults.Year;
results.Medium = model.alResults.Medium;
results.ZScore = model.alResults.ZScore;
context.tblALResults.Add(results);
Save();
scope.Complete();
}
}
return true;
}
catch (Exception ex)
{
throw ex;
}
}
Обновить запись
public bool Update(InitialApplicantLevel2Model model)
{
try
{
using (context = new SIMSDBAPPEntities())
{
using (TransactionScope scope = new TransactionScope())
{
var tb = (from tba in context.tblInitialApplicantLevel2
where tba.InitialApplicantLevel2ID == model.InitialApplicantLevel2ID
select tba).SingleOrDefault();
tb.NIC = model.NIC;
tb.Passport = model.Passport;
tb.Sex = model.Sex;
var results = (from tbr in context.tblALResults
where tbr.InitialApplicantLevel2ID == model.InitialApplicantLevel2ID
select tbr).SingleOrDefault();
results.Attempt = model.alResults.Attempt;
results.Grading = model.alResults.Grading;
results.IndexNo = model.alResults.IndexNo;
results.InitialApplicantLevel2ID = tb.InitialApplicantLevel2ID;
results.Stream = model.alResults.Stream;
results.Year = model.alResults.Year;
results.Medium = model.alResults.Medium;
results.ZScore = model.alResults.ZScore;
Save();
scope.Complete();
}
}
return true;
}
catch (Exception ex)
{
throw ex;
}
}
Посмотреть
<tr><td colspan="6"><hr /><b>G.C.E. (A/L) Results</b></td></tr>
<tr>
<td>Year: </td>
<td>@Html.TextBoxFor(o=>o.alResults.Year)</td>
<td>Index No: </td>
<td>@Html.TextBoxFor(o=>o.alResults.IndexNo)</td>
<td>Medium: </td>
<td>@Html.TextBoxFor(o=>o.alResults.Medium)</td>
</tr>
<tr>
<td>Stream: </td>
<td>@Html.TextBoxFor(o=>o.alResults.Stream)</td>
<td>Attempt: </td>
<td>@Html.TextBoxFor(o=>o.alResults.Attempt)</td>
<td>Zscore: </td>
<td>
@Html.TextBoxFor(o=>o.alResults.ZScore)
</td>
</tr>
Детали учащихся вставляются без проблем, но свойства ALResults имеют значение NULL. Однако при обновлении свойств объекта ALResults свойства получают из представления и прекрасно обновляют запись. Почему свойства объекта равны нулю при вставке записи?
Попробуйте, как показано ниже. Используйте "виртуальный" объект "alResults".
public class InitialApplicantLevel2Model
{
//removed for clarity
public virtual ALResults alResults { get; set; }
}
model.alResults
не равны NULL? Включите написание всех команд MySQL для вывода в классе хранения EFContext, если вы используете Entity Framework и посмотрите, есть ли какие-либо ошибки MySQL, уведомления о сериализации или если команда Create Table имеет все свойства.