首先使用EF代码,我在Packages
创建了复合主键,Services
创建了Id
和Member_Id
。
然后我将这两个表中的外键变成Promises
。
正如您所看到的,它没有将两个外键关联回同一Member
,从而允许package
成员与service
成员不同。这不是我的意图。
我打算让Promises
只有一个Member_Id
列,并在两个外键中重复使用它。在问题方面,我打算promises
仅拥有拥有services
member
的{{1}} promise
。
我可以在数据库中轻松完成此操作。请参见此固定图表:
这允许将package
的复合外键复制回Promises
和Packages
。
如何在EF中将我的类归因于实现此结果?
我是Database First迁移的唯一选择,并查看它是如何模仿我在数据库图表编辑器中手动完成的操作的?
答案 0 :(得分:0)
我必须:
OnModelCreating
)类中的DbContext
例程中完成的: 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);
}