我有一个名为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);
答案 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