2011-10-10 57 views
2

我在C#.Net中有一個MVC3項目。我有object1帶有對象2列表...具有子對象集合的MVC3對象

//navigation Property(s) 
    public virtual ICollection<Object2> Object2s { get; set; } 

對象2有一個Object1財產和財產Object1_Id

public int Object1_Id { get; set; } 
    public virtual Object1 Object1 { get; set; } 

當我運行索引視圖的對象2我得到的消息「無效的列名'Object1_Id1'」。奇怪......它正在尋找一個自動化的專欄。當我從Object2中刪除Object1_Id時,它直到我在創建視圖中保存爲止。然後它會拋出一條錯誤消息:

{"Cannot insert the value NULL into column 'Object1_Id', table 'dbo.Object2'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."} 

我相信我只是想念一個簡單的步驟。有任何想法嗎?

+0

我猜你正在使用Code-First方法? –

+0

@Watermark ...是的...有什麼想法?我無法從代碼修改數據庫。管理員必須這樣做 – MikeTWebb

回答

1

我想通了,我的問題。當我在Object2控制器上調用Create post操作時,我檢索父Object1,爲我的新Object2創建一個Guid,將新Object2添加到Object1.Object2s集合,設置Object1狀態爲已修改,然後保存db:

  var object1ToUpdate = db.Object1s.Where(
        aObject1 => aObject1.Id.Equals(myId) 
       ).Include(aObject1 => aObject1.Object2s).Single(); 
      string id = Guid.NewGuid().ToString(); 
      Object2.Id = Guid.NewGuid(); 
      object1ToUpdate.Object2s.Add(Object2); 
      db.Entry(object1ToUpdate).State = EntityState.Modified; 
      db.SaveChanges(); 
1

您想使用流利的API進行調整。您可以在您的數據庫上下文類中執行此操作。查看此鏈接頁面的底部以查看使用流利API的示例。

http://www.asp.net/entity-framework/tutorials/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

public class ObjectContext : DbContext 
    { 
     public DbSet<Object1> Object1s{ get; set; } 
     public DbSet<Object2> Object2s{ get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
      modelBuilder.Entity<Object2>() 
       .HasOptional(o => o.Object1).WithRequired(o => o.Object2); 
     } 
    } 
+0

我想我誤解了你的對象之間的關係,當我回答這個問題時,讓我知道什麼有效,我會編輯最終答案以反映它。您可能不得不在模型構建器語句中換出對象以使其按照您想要的方式工作。 –