Я работал через приложение Nerd Dinner
. В методе Создать действие они имеют следующий код:
NerdIdentity nerd = (NerdIdentity)User.Identity;
dinner.HostedById = nerd.Name;
dinner.HostedBy = nerd.FriendlyName;
RSVP rsvp = new RSVP();
rsvp.AttendeeNameId = nerd.Name;
rsvp.AttendeeName = nerd.FriendlyName;
dinner.RSVPs.Add(rsvp);
dinnerRepository.Add(dinner);
dinnerRepository.Save();
Сначала я использую Entity Framework 4.1
код.
Вот мой GrantApplication
класс:
public class GrantApplication
{
public int Id { get; set; }
// Other properties
public virtual ICollection<AuditEntry> AuditEntries { get; set; }
}
В моем слое обслуживания я делаю следующее, так же, как это делает Nerd Dinner:
public void Insert(GrantApplication grantApplication)
{
// Add audit entry
grantApplication.AuditEntries.Add(new AuditEntry
{
NewValue = grantApplication.GrantApplicationStateId,
AuditDate = currentDateTime,
EmployeeNumber = submitterEmployeeNumber
});
// Insert the new grant application
grantApplicationRepository.Insert(grantApplication);
}
Мой класс AuditEntry:
public class AuditEntry
{
public int Id { get; set; }
public int OldValue { get; set; }
public int NewValue { get; set; }
public DateTime AuditDate { get; set; }
public string EmployeeNumber { get; set; }
}
Мой контекстный класс:
public class HbfContext : DbContext
{
public DbSet<Bank> Banks { get; set; }
public DbSet<AccountType> AccountTypes { get; set; }
public DbSet<GrantApplication> GrantApplications { get; set; }
public DbSet<AuditEntry> AuditEntries { get; set; }
protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
}
}
Я получаю сообщение об ошибке, что grantApplication.AuditEntries имеет значение null, поэтому он не может добавить объект записи аудита. Почему у меня значение null, а ужин. RSVP не равен нулю, когда пытается добавить объект RSVP? Как бы это исправить?
Нужно ли добавлять AuditEntries в HbfContext? Я имею в виду, я не собираюсь использовать это самостоятельно. Он будет использоваться только при редактировании приложения Grant.
UPDATE
Я, должно быть, использую старую версию Nerd Dinner, но вот как выглядит мой Create:
[HttpPost, Authorize]
public ActionResult Create(Dinner dinner)
{
if (ModelState.IsValid)
{
NerdIdentity nerd = (NerdIdentity)User.Identity;
dinner.HostedById = nerd.Name;
dinner.HostedBy = nerd.FriendlyName;
RSVP rsvp = new RSVP();
rsvp.AttendeeNameId = nerd.Name;
rsvp.AttendeeName = nerd.FriendlyName;
dinner.RSVPs.Add(rsvp);
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
return View(dinner);
}