Contact テーブルの SpouseId から 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が、自動インクリメント キーと自己参照外部キーが「依存操作の有効な順序を決定できません」というエラーを引き起こす理由を概説している良いリンクを見つけました。これが私の問題だと思います。これが誰かに役立つことを願っています。