如果引用列“ Y”是标识列,则无法创建级联外键“ X”

时间:2019-08-21 18:59:14

标签: entity-framework-core ef-core-3.0

我正在尝试将OwnedTypes sample升级到EF Core 3.0 Preview 8,但是当我运行该项目时,它无法创建数据库。

调用Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()时会引发以下异常:

  

Microsoft.Data.SqlClient.SqlException:如果引用列'OrderDetails.OrderId'是标识列,则无法创建级联外键'FK_OrderDetails_DetailedOrders_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
}

Full project

我认为3.0 breaking changes列表中有一些我需要关注的东西吗?

1 个答案:

答案 0 :(得分:0)

  • 您可以删除od.ToTable("OrderDetails");以将OrderDetails映射到与DetailedOrder相同的表中
  • 您可以添加od.Property("OrderId").ValueGeneratedNever();以禁用将OrderId列标记为身份