1

我通过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; } 
} 

在我的服务层我这样做,一样什么书呆子晚餐做它:

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,因此它无法添加审计入口对象。为什么是我的空,但晚餐。当它试图添加RSVP obkect时,RSVPs不是空的?我将如何解决它?

我需要将AuditEntries添加到HbfContext吗?我的意思是我不会单独使用它。它仅在编辑GrantApplication时使用。

UPDATE

我必须使用书呆子晚餐的旧版本,但是这是我创建的样子:

[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); 
} 

回答

1

嗯,因为NerdDinner范例DinnersController.Create includes a line of code which you didn't show

  dinner.RSVPs = new List<RSVP>(); // why is this not in your example? 
      dinner.RSVPs.Add(rsvp); 

我需要AuditEntries添加到HbfContext?

是的,你这样做。那么,你必须以某种方式将它们添加到你的EF模型中。这是做到这一点的一种方式。您也可以使用OnModelCreating中的代码来完成此操作。

+0

这可能是一个较新版本的书呆子晚餐,但我更新了我原来的帖子,以我的。我将会去实例化我的列表。 –