【问题标题】:Join To Existing Record In Many to Many Relation在多对多关系中加入现有记录
【发布时间】:2012-09-17 01:35:15
【问题描述】:

这里是 多对多 关系的 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 的副本,然后建立关系

【问题讨论】:

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


    【解决方案1】:

    在您的 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 有一些很棒的更多信息。

    【讨论】:

    • 谢谢 Terric,这个流畅的 API 明确了 FOODOO 之间的关系,在代码部分 2 中,我如何设置 doo 对象与 foo 相关?!跨度>
    • @Mironline 抱歉,我不确定您的意思——foodoo 之间不是多对多关系吗?这个流利的 API 指定了,或者您是否也想要一对一的引用?
    猜你喜欢
    • 2015-10-22
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2020-09-16
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多