2

我正在研究一個asp.net應用程序。我需要幫助設計數據庫相關模型和linq查詢。asp.net MVC3應用程序流程

我有三個表(和兩個查找表)。

1)產品報頭(產品集管id作爲主鍵) 2)產品詳細信息(它有產品集管id作爲外鍵) 3)產品附件(它有產品細節id作爲外鍵)

現在,我需要在db中插入記錄。 b)對於多個產品明細記錄,可以有多個附件。b)對於多個產品明細記錄,可以有多個附件。

我爲每個表格創建了三個實體。產品標題還包含用戶表和歷史記錄表中的兩個鍵。但是鑑於我需要顯示用戶名而不是密鑰。我應該創建一個視圖模型類,它將所有這些實體類作爲屬性保存,並且如何確保在產品頭中插入第一條記錄,然後再插入產品詳細信息和產品附件?

請建議。

感謝

回答

1

一個簡單的方法來做到這一點是使用附帶EF新代碼處女作4.1

你可以創建你的「實體」,例如:

public class ProductHeader 
{ 
    public int ID {get; set;} 

    public virtual ICollection<ProductDetail> ProductDetails {get; set;} 

    //Other properties 
} 

public class ProductDetail 
{ 
    public int ID {get; set;} 

    public virtual ICollection<ProductAttachment> ProductAttachments {get; set;} 

    //Other properties 
} 

public class ProductAttachment 
{ 
    public int ID {get; set;} 

    // you can have a navigation property here for the user, this allows you to access his name 
    public virtual User User {get; set;} 
    //Other properties 
} 

public class MyContext:DbContext 
{ 
    public DbSet<ProductHeader> ProductHeaders {get; set;} 
    public DbSet<ProductDetail> ProductDetails {get; set;} 
    public DbSet<ProductAttachment> ProductAttachment {get; set;} 
} 

爲插入順序,只需添加ProductHeader(在添加ProductDetails和ProductAttachments之後),EF將負責處理它。

編輯:這裏 是一個示例代碼添加ProductHeader:

var context=new MyContext(); 
var ph=new ProductHeader(); 
ph.User=user; 
var pd=new ProductDetail(); 
pd.ProductAttachments.Add(new ProductAttachment()); 
ph.ProductDetails.Add(pd); 
context.ProductHeaders.Add(ph); 
context.SaveChanges(); 

希望這有助於。

+0

我需要在其他人之前添加productheader並在子實體中使用新生成的ID。我怎樣才能做到這一點 ? – DotnetSparrow 2011-04-13 11:58:13

+0

@DotnetSparrow - 只要模型定義與他正確實體相關,EF將爲您處理此問題。 – 2011-04-13 12:04:24

+0

@DotnetSparrow:你不需要「手動」這樣做。我已經更新了我的答案,以展示如何添加ProductHeader – AbdouMoumen 2011-04-13 12:09:31