1

我開始對使用Razor Views的MVC 3 C#項目使用實體框架(使用POCO類)。多對多關係|插入|刪除

我有麻煩implimenting多對多功能,它

我試圖創建一個視圖,當用戶能夠添加電話號碼,電子郵件,musictypes,標誌,持有,ntoes等。 ..通過多對多關係

即)公司----> CompanyVenue < ----地點

我設法得到EF存儲地點,然後隨後能夠ASIGN場館通過選擇列表中的場地並分配給Compan年。

有沒有辦法讓場館自動存儲公司與場館的關係,而無需通過列表選擇它?

如果這是不可能的,任何人都可以分享一個更好的使用EF實現Implimenting的方法。

回答

0

剛纔有這個簡單的設置:

public Company 
{ 
    public virtual ICollection<Venue> Venues { get; set; } 
} 

public Venue 
{ 
    public virtual ICollection<Company> Companies { get; set; } 
} 

EF應該能夠確定你聲明許多一對多的關係。我不知道你是使用EF 4.1 Code First還是模型設計師,但Code First應該有足夠的能力爲你創建CompanyVenue表。模型設計人員會在您聲明多對多關係後立即爲您定義「鏈接」表。

請注意,導航屬性標記爲virtual。對於集合來說,這是必要的,以便EF可以在相關實體中進行適當的更新。

0

下面介紹如何在Code First中手動執行此操作。首先你的POCO類可能是這個樣子:

public class Company 
{ 
    public Company() 
    { 
     Venues = new List<Venue>(); 
    } 
    public int CompanyID { get; set; } 
    public string CompanyName { get; set; } 
    public virtual ICollection<Venue> Venues { get; set; } 
} 

public class Venue 
{ 
    public int VenueID { get; set; } 
    public string VenueName { get; set; } 
    public virtual ICollection<Company> Companies { get; set; } 
} 

在你的DbContext:

public IDbSet<Company> Companies { get; set; } 
public IDbSet<Venue> Venues { get; set; } 

另外在的DbContext類重寫OnModelCreating方法。這是你如何在衆多映射到公司與地點之間的多對多關係:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Company>() 
     .HasMany(comp => comp.Venues) 
     .WithMany(venue => venue.Companies) 
     .Map(mc => 
     { 
     mc.ToTable("T_Company_Venue"); 
     mc.MapLeftKey("CompanyID"); 
     mc.MapRightKey("VenueID"); 
     } 
    ); 

    base.OnModelCreating(modelBuilder); 
} 

我回答另一個EF多對多的問題與完整的示例代碼在這裏:

MVC many to many

我也寫了以上進入2個博客帖子有完整的解決方案和示例代碼可供下載:

1部分:

Saving many to many part 1

第2部分:

Saving many to many part 2

相關問題