实体框架:来自同一模型的多个导航属性在添加迁移时导致错误

时间:2016-11-20 03:33:57

标签: c# entity-framework asp.net-core entity-framework-core

我有一个名为TypeListItem的模型w /三个属性(Id, TypeListId, Name),其中包含一堆列表。

例如:

  

产品类型:强,弱,中等

     

ProductCategory:类别1,类别2,类别3

我的产品型号如下所示:

public int Id {get; set;}
public string Name {get; set;}
public int ProductTypeId {get; set;}  
public int ProductCategoryId {get; set;}

// Navigation Properties
public TypeListItem ProductType {get; set;}
public TypeListItem ProductCategory {get; set;}

但是,当我去添加迁移然后dotnet ef database update'时,我收到错误:

  

介绍FOREIGN KEY约束:   表''产品'上的FK_Product_TypeListItem_ProductCategoryId可能会导致   循环或多个级联路径。

我还使用流畅的api进行以下操作:

builder.Entity<Product>()
    .Property(p => p.ProductTypeId)
    .IsRequired();
builder.Entity<Product>()
    .Property(p => p.ProductCategoryId)
    .IsRequired();

我认为错误是因为我有两个使用相同对象的导航属性,两者都是必需的。

有什么建议吗?我的模型有问题吗?

这样的事情对ef核心有意义吗?

    builder.Entity<Product>()
        .HasOne(p => p.ProductType)
        .WithOne().OnDelete(DeleteBehavior.Restrict);

    builder.Entity<Product>()
        .HasOne(p => p.ProductCategory)
        .WithOne().OnDelete(DeleteBehavior.Restrict);

1 个答案:

答案 0 :(得分:1)

您需要使用OnDelete(DeleteBehavior.Restrict),如下所示。

注意:

  

限制:删除操作不适用于从属实体。   依赖实体保持不变。

builder.Entity<Product>()
    .Property(p => p.ProductTypeId)
    .WithOne()
    .OnDelete(DeleteBehavior.Restrict);

builder.Entity<Product>()
    .Property(p => p.ProductCategoryId)
    .WithOne()
    .OnDelete(DeleteBehavior.Restrict);

您可以在此处查看更多内容:Cascade Delete