實體框架:來自同一模型的多個導航屬性在添加遷移時導致錯誤

asp.net-core c# entity-framework entity-framework-core

我有一個名為TypeListItem的模型(Id, TypeListId, Name)它包含三個屬性(Id, TypeListId, Name) ,其中包含一堆列表。

例如:

ProductType:強,弱,中等

ProductCategory:類別1,類別2,類別3

我有一個如下所示的Product模型:

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約束:表'Product'上的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);

熱門答案

您需要使用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



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow