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);

我该如何设置,对象与(在表中添加 fooID 和 dooID )_foo具有多对多关系_dooFooDoo

注意 1:当我使用 _foo.doo.Add(_doo);EF 创建一个副本_doo然后建立关系

4

1 回答 1

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关联返回哪些主键。

这篇文章有一些很好的进一步信息。

于 2012-09-25T14:09:36.353 回答