加入多对多关系中的现有记录

时间:2012-09-25 14:00:19

标签: c# entity-framework-4 ef-code-first many-to-many

这是多对多关系的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具有多对多关系(在FooDoo表中添加fooID和dooID)

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

1 个答案:

答案 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当然是数据库表,您将存储多对多关联。您告诉我使用MapLeftKeyMapRightKey关联返回哪些主键。

This article有一些更好的信息。