EF Code First没有外键的自引用实体映射

时间:2018-02-21 18:15:16

标签: c# ef-code-first

我有一个具有标准自我亲和亲子关系的课程;但我在数据库表中没有外键列,只有一个唯一(自然)键。我想根据两个 varchar(64)字段NumberParentNumber(两者都不是PK)来映射父母和孩子:

public class Centre
{
    public int Id { get; set; } // PK
    public string Number { get; set; } // alternative identifier, required, unique, fixed length (64 chars)
    public string ParentNumber { get; set; } // optional (null if no parent centre, otherwise the Number of that centre)

    public virtual Centre ParentCentre { get; set; } // to be populated if this.ParentNumber is not null)
    public virtual IList<Centre> ChildCentres { get; set; } // to be populated if otherCentre.Number == this.ParentNumber for at least one centre)
}

我是否可以使用Fluent API指定映射来实现此目的?我不知道如何在关系中指定两个非PK字段。

HasOptional(c => c.ParentCentre).WithMany().HasForeignKey(c => c.ParentCentreNumber); // this surely won't work because we haven't specified that c.Number should be part of the mapping

Property(c => c.Id);
Property(c => c.Number).HasMaxLength(64).IsRequired().IsUnicode(false).HasColumnAnnotation( IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute("IX_Number") { IsUnique = true }) );
Property(c => c.ParentNumber).HasMaxLength(64).IsUnicode(false);

编辑:我使用的是EF 6.如果没有EF Core,这似乎是不可能的。是吗?

0 个答案:

没有答案