1.1或1.0关系中的实体框架基数
本文关键字:框架 实体 关系 | 更新日期: 2023-09-27 18:01:33
我有一个实体,它有一个自我引用,这样一个成员可以有一个必须是成员的证人,也可以有一个必须是成员的引用。我对其建模如下:
public class Member
{
public int Id { get; set; }
//omitted for brevity
public int? WitnessId { get; set; }
public virtual Member Witness { get; set; }
public int? ReferenceId { get; set; }
public virtual Member Reference { get; set; }
}
当我在包管理器控制台上运行update-database时,我得到以下错误:"XXX.Client.Entities。"会员"answers"xxx . client . entities .会员"。这种关联的主体端必须使用关系流畅API或数据注释显式配置。
有办法解决这个问题吗?
尝试用这种方式(对我来说有效)定义关系:
modelBuilder.Entity<Member>().HasKey(x => x.Id);
modelBuilder.Entity<Member>().HasOptional(x => x.Witness)
.WithMany()
.HasForeignKey(m => m.WitnessId);
modelBuilder.Entity<Member>().HasOptional(x => x.Reference)
.WithMany()
.HasForeignKey(m => m.ReferenceId);
这看起来是工作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Member>().
HasOptional(e => e.Witness).
WithMany().
HasForeignKey(m => m.WitnessID);
modelBuilder.Entity<Member>().
HasOptional(e => e.Reference).
WithMany().
HasForeignKey(m => m.ReferenceID);
base.OnModelCreating(modelBuilder);
}
这也适用于那些喜欢在类中从EntityTypeConfiguration派生东西的人
class MemberEntityConfiguration : EntityTypeConfiguration<Member>
{
public MemberEntityConfiguration()
{
HasKey(x => x.Id);
HasOptional(x => x.Witness).WithMany().HasForeignKey(m => m.WitnessId);
HasOptional(x => x.Reference).WithMany().HasForeignKey(m => m.ReferenceId);
}
}