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

這可能是一個較新版本的書呆子晚餐,但我更新了我原來的帖子,以我的。我將會去實例化我的列表。 –