У меня есть две модели, как показано ниже:
public class Person{
public virtual int Id { get; set; }
public virtual int BaseId { get; set; }
public virtual string Name { get; set; }
public virtual Employee Employee { get; set; }
}
public class Employee{
public virtual int Id { get; set; }
public virtual string Code{ get; set; }
public virtual Person Person { get; set; }
}
Каждый Employee
является Person
, но каждый Person
не обязательно является Employee
.Отношение между этими двумя типами является отношением One-One, но мне нужно установить это отношение между столбцом без первичного ключа (Person.BaseId
) и желаемым столбцом внешнего ключа (Employee.Id
).На первый взгляд, столбец Id
в модели Employee
является одновременно столбцом первичного и внешнего ключей.
У меня есть такая конфигурация сопоставления:
public override void Configure(EntityTypeBuilder<Person> builder)
{
builder.HasKey(x => x.Id);
builder.ToTable("tblPeople", "dbo");
builder
.HasOne(p => p.Employee)
.WithOne(p => p.Person)
.HasForeignKey<Employee>(p => p.Id)
.HasPrincipalKey<Person>(p => p.BaseId);
}
public override void Configure(EntityTypeBuilder<Employee> builder)
{
builder.HasKey(x => x.Id);
builder.ToTable("tblEmployees", "dbo");
}
Когда я пытаюсьсгенерировать миграцию Я получаю следующую ошибку:
Не удалось определить дочернюю / зависимую сторону для отношений один-к-одному между «Employee.Person» и «Person.Employee».Чтобы определить дочернюю / зависимую сторону отношения, настройте свойство внешнего ключа.Если эти переходы не должны быть частью одного и того же отношения, настройте их без указания обратного.См. http://go.microsoft.com/fwlink/?LinkId=724062 для получения более подробной информации.
Я не не хочу использовать аннотацию данных для решения этой проблемы.