【问题标题】:How to relate two unrelated foreign keys back to the same entity如何将两个不相关的外键关联回同一个实体
【发布时间】:2016-05-16 22:55:28
【问题描述】:

首先使用 EF 代码,我在 PackagesServices 上创建了由 IdMember_Id 组成的复合主键。

然后我将这两个表中的外键设为Promises

如您所见,它没有将两个外键关联回同一个Member,因此允许package 成员与service 成员不同。这不是我想要的。

我打算让 Promises 只有一个 Member_Id 列,并在两个外键中重用它。就问题而言,我打算让promises 只拥有拥有promisememberservicespromisepackage

我可以在数据库中轻松地做到这一点。请参阅此固定图:

这具有从Promises 回到PackagesServices 的复合外键。

我如何在 EF 中归因于我的类以实现此结果?

数据库优先迁移是我唯一的选择吗?看看它是如何模仿我在数据库图表编辑器中手动执行的操作的?

【问题讨论】:

    标签: entity-framework-5


    【解决方案1】:

    我不得不:

    1. 按照我想要的方式修复我的数据库
    2. 新建类库项目
    3. 添加实体框架模型。从现有数据库中选择 Code First
    4. 查看我的类和从 Database First 生成的类之间的差异,看看我需要将哪些应用到我的模型中。在这种情况下,我发现创建我想要的外键的唯一方法是使用代码而不是属性,这是在模型 (DbContext) 类的 OnModelCreating 例程中完成的:
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
          modelBuilder.Entity<Member>()
              .HasMany(e => e.Packages)
              .WithRequired(e => e.Member)
              .HasForeignKey(e => e.Member_Id);
    
          modelBuilder.Entity<Member>()
              .HasMany(e => e.Products)
              .WithRequired(e => e.Member)
              .HasForeignKey(e => e.Member_Id);
    
          modelBuilder.Entity<Member>()
              .HasMany(e => e.Services)
              .WithRequired(e => e.Member)
              .HasForeignKey(e => e.Member_Id);
    
          modelBuilder.Entity<Package>()
            .HasMany(e => e.Promises)
            .WithRequired(e => e.Package)
            .HasForeignKey(e => new { e.Package_Id, e.Member_Id })
            .WillCascadeOnDelete(false);
    
          modelBuilder.Entity<Service>()
            .HasMany(e => e.Promises)
            .WithRequired(e => e.Service)
            .HasForeignKey(e => new { e.Service_Id, e.Member_Id })
            .WillCascadeOnDelete(false);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 2014-12-11
      相关资源
      最近更新 更多