Нельзя создать каскадный внешний ключ "X", если ссылочный столбец "Y" является столбцом идентификаторов.

Я пытаюсь обновить образец OwnedTypes до EF Core 3.0 Preview 8, но когда я запускаю проект, он не может создать базу данных.

когда Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated() Вызывается следующее исключение:

Microsoft.Data.SqlClient.SqlException: 'Каскадный внешний ключ'FK_OrderDetails_DetailedOrders_OrderId'не может быть создан, когда ссылочный столбец'OrderDetails.OrderId'является столбцом идентификаторов. Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

Какие предыдущие ошибки?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{            
    #region OwnsOneNested
    modelBuilder.Entity<DetailedOrder>().OwnsOne(p => p.OrderDetails, od =>
    {
        od.OwnsOne(c => c.BillingAddress);
        od.OwnsOne(c => c.ShippingAddress);
    });
    #endregion

    #region OwnsOneTable
    modelBuilder.Entity<DetailedOrder>().OwnsOne(p => p.OrderDetails, od =>
    {
        od.OwnsOne(c => c.BillingAddress);
        od.OwnsOne(c => c.ShippingAddress, sa =>
        {
            sa.Ignore(p => p.IgnoreMe);
        });
        od.ToTable("OrderDetails");
    });
    #endregion
}

Полный проект

Я предполагаю, что есть что-то в списке критических изменений 3.0, которым я должен следовать?

1 ответ

Решение
  • Вы можете удалить od.ToTable("OrderDetails"); на карту OrderDetails к той же таблице, что и DetailedOrder
  • Можете добавить od.Property("OrderId").ValueGeneratedNever(); отключить маркировку OrderId колонка как личность
Другие вопросы по тегам