我有一个具有标准自我亲和亲子关系的课程;但我在数据库表中没有外键列,只有一个唯一(自然)键。我想根据两个 varchar(64)字段Number
和ParentNumber
(两者都不是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,这似乎是不可能的。是吗?