2012-09-25 58 views
0

這裏是EF代碼第一類爲多對多關係加入到現有記錄在多對多關係

public class Foo(){ 
    .... 
    public ICollection<Doo> doo { set; get; } 
} 

public class Doo(){ 
    .... 
    public ICollection<Foo> foo { set; get; } 
} 

EF創建3代表在數據庫中,FooDoo和連接表FooDoo部分

這裏是我的代碼:

var _foo = context.Foo.FirstOrDefault(o=>o.id == fooID); 
var _doo = context.Doo.FirstOrDefault(o=>o.id == dooID); 

我該怎麼設置,_foo對象具有_doo(添加fooID和dooID在FooDoo表)

注1許多一對多的關係: 當我使用_foo.doo.Add(_doo); EF創建的_doo重複,然後使關係

回答

0

在你DbContext重寫你可以做這樣的事情:

public class MyContext : DbContext 
{ 
    public DbSet<Doo> Doos { get; set; } 
    public DbSet<Foo> Foos { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new DooConfiguration()); 
     modelBuilder.Configurations.Add(new FooConfiguration()); 
    } 
} 

internal class DooConfiguration : EntityTypeConfiguration<Doo> 
{ 
    public DooConfiguration() 
    { 
     // your other property mappings here 

     HasMany(m => m.Foo) 
     .WithMany(m => m.Doo) 
     .Map(m => { 
      m.MapLeftKey("fooID"); 
      m.MapRightKey("dooID"); 
      m.ToTable("ManyToManyTableName"); 
     }); 
    } 
} 

internal class FooConfiguration : EntityTypeConfiguration<Foo> 
{ 
    public FooConfiguration() 
    { 
     // your other property mappings here 

     HasMany(m => m.Doo) 
     .WithMany(m => m.Foo) 
     .Map(m => { 
      m.MapLeftKey("dooID"); 
      m.MapRightKey("fooID"); 
      m.ToTable("ManyToManyTableName"); 
     }); 
    } 
} 

如果您ManyToManyTableName當然你會被儲存您的許多-to-many關聯的數據庫表。您正在通過MapLeftKeyMapRightKey關聯來確定返回哪些主鍵。

This article有一些很好的進一步的信息。

+0

謝謝Terric,這個流利的API在代碼第2節中明確了'FOO'和'DOO'之間的關係,我如何設置'doo'對象與'foo'有關? – Mironline

+0

@Mironline抱歉,我不確定你的意思 - 「foo」和「doo」之間沒有多對多的關係嗎?這種流利的API指定,或者你也想要一對一的參考嗎? –

相關問題