Посмотрите эти модели:
class Esquema
{
public Cabecalho Cabecalho { get; set;}
public Rodape Rodape { get; set;}
}
abstract class Segmento
{
//...some props
public Esquema Esquema { get; set;}
}
class Cabecalho : Segmento
{
}
class Rodape : Segmento
{
}
Использование EF Core для сопоставления этих моделей:
public class EsquemaConfig : IEntityTypeConfiguration<Esquema>
{
public void Configure(EntityTypeBuilder<Esquema> builder)
{
builder.ToTable(nameof(Esquema));
builder.HasOne(x => x.Cabecalho).WithOne(x => x.Esquema);
builder.HasOne(x => x.Rodape).WithOne(x => x.Esquema);
}
}
public class SegmentoConfig : IEntityTypeConfiguration<Segmento>
{
public void Configure(EntityTypeBuilder<Segmento> builder)
{
builder.ToTable(nameof(Segmento));
//...map others props
}
}
public class CabecalhoConfig : IEntityTypeConfiguration<Cabecalho>
{
public void Configure(EntityTypeBuilder<Cabecalho> builder)
{
builder.ToTable(nameof(Segmento));
builder.HasOne(x => x.Esquema).WithOne(x => x.Cabecalho);
}
}
public class RodapeConfig : IEntityTypeConfiguration<Rodape>
{
public void Configure(EntityTypeBuilder<Rodape> builder)
{
builder.ToTable(nameof(Segmento));
builder.HasOne(x => x.Esquema).WithOne(x => x.Rodape);
}
}
Когда я выполняю приложение, возникает исключение:
Дочерняя / зависимая сторона не может быть определена для отношений «один к одному» между «Esquema.Cabecalho» и «Cabecalho.Esquema». Чтобы определить дочернюю / зависимую сторону отношения, настройте свойство внешнего ключа. Если эти переходы не должны быть частью одного и того же отношения, настройте их без указания обратного. Подробнее см. http://go.microsoft.com/fwlink/?LinkId=724062.