Я пытаюсь сослаться на внешний ключ от SpouseId на Id в таблице контактов. Каков синтаксис для этого? Я не могу найти пример. Спасибо.
У меня есть такой класс:
public class Contact
{
public int Id {get;set;}
public string Name {get;set;}
public int? SpouseId {get;set;}
}
EDIT1
По ссылке , предоставленной Джоэлом Каннингемом и ответом Мортезы, я добавил дополнительный код.
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());
}
}
Примечание. Я также добавил атрибут "[ForeignKey (" SpouseId ")]" к своему свойству Spouse в своем классе Contact. К сожалению, я продолжаю получать «Последовательность содержит более одного соответствующего элемента».
EDIT2:
Ответы Мортезы ниже верны. Подводя итог: Для самостоятельной ссылки на внешние ключи вы можете пометить свойство как «[ForeginKey (« SpouseId »)]] ИЛИ использовать приведенный ниже пример API. Ошибки, о которых я сообщал в некоторых моих комментариях, были вызваны моим модульным тестом. EF правильно сгенерировал БД. Я нашел хорошую ссылку , где Крейг Штунц обрисовал в общих чертах, почему автоинкрементные ключи и внешние ссылки с самоссылкой могут вызвать «Невозможно определить действительный порядок «Операции с зависимыми операциями». Я считаю, что это и есть моя проблема. Надеюсь, это кому-нибудь поможет.