【发布时间】:2011-06-16 05:18:17
【问题描述】:
我正在尝试将外键从 SpouseId 引用到 Contact 表中的 Id。这样做的语法是什么?我似乎找不到一个例子。谢谢。
我有这样的课:
public class Contact
{
public int Id {get;set;}
public string Name {get;set;}
public int? SpouseId {get;set;}
}
EDIT1 根据 Joel Cunningham 提供的 link 和 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 示例。我在某些 cmets 中报告的错误是由我的单元测试引起的。EF以正确的方式生成数据库。我找到了一个很好的link where Craig Stuntz 概述了为什么自动增量键和自引用外键会导致“无法确定相关操作的有效排序”错误。我相信这是我的问题是什么。希望这对某人有所帮助。
【问题讨论】:
-
这看起来像我所追求的。您是否知道属性“[ForeignKey]”在哪个程序集中?我似乎也找不到。
-
System.ComponentModel.DataAnnotations
标签: entity-framework ef-code-first