Я пытаюсь внедрить самореферентные отношения в EF Core. Я пытаюсь использовать пользовательский внешний ключ и главный ключ, которые не сопоставлены с реальными столбцами базы данных.
С приведенным ниже кодом я получаю сообщение об ошибке
'Отсутствует поле поддержки можно найти для свойства 'HeadOfHouseholdForeignKey' типа сущности 'Person', и у свойства нет установщика
. Есть ли способ получить эти внешние / главные ключи, которые не сопоставлены со столбцом в БД? Есть ли способ сделать это красиво в EF Core?
Пример:
PersonContext.cs
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp1
{
public class PersonContext : DbContext
{
DbSet<Person> People;
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Person>()
.HasOne(p => p.HeadOfHouseHold)
.WithMany()
.HasForeignKey(p => p.HeadOfHouseholdForeignKey)
.HasPrincipalKey(p => p.HeadOfHouseholdPrincipalKey);
}
}
}
Person.cs
namespace ConsoleApp1
{
internal class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public string FamilyName { get; set; }
public string PersonSequenceNumber { get; set; }
public Person HeadOfHouseHold { get; set; }
public string HeadOfHouseholdForeignKey
{
get
{
// Head of household always has '01' as PersonSequenceNumber in DB, other members increment from 01 to 02, 03, etc
if (PersonSequenceNumber != "01")
{
return FamilyName + "01";
}
else
{
return null;
}
}
}
public string HeadOfHouseholdPrincipalKey
{
get
{
return FamilyName + PersonSequenceNumber;
}
}
}
}