我正在尝试将外键从 SpouseId 引用到 Contact 表中的 Id。这样做的语法是什么?我似乎找不到一个例子。谢谢。
我有这样的课:
public class Contact
{
public int Id {get;set;}
public string Name {get;set;}
public int? SpouseId {get;set;}
}
EDIT1 根据 Joel Cunningham 提供的链接和 Morteza 的回答,我添加了一些额外的代码。
ContactMap.cs
public partial class ContactMap : EntityTypeConfiguration<Contact>
{
public ContactMap()
{
this.ToTable("Contact");
this.HasKey(c => c.Id);
this.HasOptional(c => c.Spouse)
.WithMany()
.IsIndependent()
.Map(m => m.MapKey(fk => fk.Id, "SpouseId"));
}
}
MyObjectContext.cs
public class MyObjectContext : DbContext, IDbContext
{
public DbSet<Contact> Contacts {get;set;}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Configurations.Add(new ContactMap());
}
}
注意:我还在 Contact 类中的 Spouse 属性中添加了“[ForeignKey("SpouseId")]”属性。不幸的是,我不断收到“序列包含多个匹配元素”。
EDIT2: Morteza 下面的答案是正确的。总结一下:对于自引用外键,您可以将属性标记为“[ForeginKey("SpouseId")] 或使用下面的流畅 API 示例。我在一些评论中报告的错误是由我的单元测试引起的。EF以正确的方式生成数据库。我找到了一个很好的链接,其中Craig Stuntz概述了为什么自动增量键和自引用外键会导致“无法确定相关操作的有效排序”错误。我相信这是我的问题是。希望这对某人有帮助。