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或数据注释显式配置。

有办法解决这个问题吗?

1.1或1.0关系中的实体框架基数

尝试用这种方式(对我来说有效)定义关系:

        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);
    }
}