这是多对多关系的EF代码优先类的一部分
public class Foo(){
....
public ICollection<Doo> doo { set; get; }
}
public class Doo(){
....
public ICollection<Foo> foo { set; get; }
}
EF在数据库中创建3个表,Foo
,Doo
并加入表FooDoo
这是我的代码:
var _foo = context.Foo.FirstOrDefault(o=>o.id == fooID);
var _doo = context.Doo.FirstOrDefault(o=>o.id == dooID);
如何设置,_foo
对象与_doo
具有多对多关系(在FooDoo
表中添加fooID和dooID)
注1:
当我使用_foo.doo.Add(_doo);
EF创建_doo
的副本,然后建立关系
答案 0 :(得分: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
当然是数据库表,您将存储多对多关联。您告诉我使用MapLeftKey
和MapRightKey
关联返回哪些主键。
This article有一些更好的信息。