我有一个实体,其中有一个自我参考,以便会员可以有一个必须是会员的证人,也可能有一个必须是会员的参考。我将其建模如下;
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.Member'和' XXX.Client.Entities.Member'。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。"
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
尝试用这种方式定义与流畅的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);
答案 1 :(得分:0)
这看起来有效:
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);
}
答案 2 :(得分:0)
对于我们这些喜欢在类中派生出来自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);
}
}