簡體   English   中英

實體框架無法更改關系,因為一個或多個外鍵屬性不可為空

[英]Entity Framework The relationship could not be changed because one or more of the foreign-key properties is non-nullable

我做了以下配置

public class ProductEligibiltyConfiguration : EntityTypeConfiguration<ProductEligibilty>
{
    public ProductEligibiltyConfiguration()
    {
        HasKey(t => t.Id).ToTable("ecom_ProductEligibilty");
        HasRequired(a => a.Product)
            .WithMany(t => t.MeetingProductEligibilty)
            .HasForeignKey(k => k.ProductId)
            .WillCascadeOnDelete(false);
        HasRequired(t => t.MemberType).WithMany().HasForeignKey(k => k.MemberTypeId).WillCascadeOnDelete(false);
    }
}

但在添加,刪除,更新表時收到錯誤。

使用以下代碼進行更新,同時我也為它們設置了所有引用和對象。

foreach (var eligibleProduct in productEligibiltyes)
        {
          ProductEligibiltys.Attach(eligibleProduct);
          Entry(eligibleProduct).State = EntityState.Modified;
          ProductEligibiltys.Add(eligibleProduct);
       }

獲取錯誤:操作失敗:無法更改關系,因為一個或多個外鍵屬性不可為空。 當對關系進行更改時,相關的外鍵屬性將設置為空值。 如果外鍵不支持空值,則必須定義新關系,必須為外鍵屬性分配另一個非空值,或者必須刪除不相關的對象。

我注意到您的代碼中存在可能解決問題的錯誤。 實際上你正在做Entry(eligibleProduct).State = EntityState.Modified; 添加新對象時ProductEligibiltys.Add(eligibleProduct);

你應該刪除這一行。 最終代碼如下所示:

foreach (var eligibleProduct in productEligibiltyes)
   {
      ProductEligibiltys.Attach(eligibleProduct);
      ProductEligibiltys.Add(eligibleProduct);
   }

在你的流暢API已添加的配置HasRequired()用於其預期外鍵非空數據,但根據錯誤說在外國鍵eligibleProduct實例外鍵屬性不應該有這些數據。 應該是錯誤。

您可以傳遞外鍵屬性的數據,也可以將HasRequired()更改為HasOptional() ,如下所示。

public class ProductEligibiltyConfiguration : EntityTypeConfiguration<ProductEligibilty>
{
    public ProductEligibiltyConfiguration()
    {
        HasKey(t => t.Id).ToTable("ecom_ProductEligibilty");
        HasOptional(a => a.Product)
            .WithMany(t => t.MeetingProductEligibilty)
            .HasForeignKey(k => k.ProductId)
            .WillCascadeOnDelete(false);
        HasOptional(t => t.MemberType).WithMany().HasForeignKey(k => k.MemberTypeId).WillCascadeOnDelete(false);
    }
}

我對你的實體還不太了解。 我假設如下

產品和ProductEligibity在一對多關系中。對於您的qualifiedProduct實例,您將有一個屬性調用ProductId,另一個屬性調用Product(這是Product實體的實例)。對於該產品實例,將有另一個屬性調用productID。我是要求你將數據傳遞給它。如果你的實體是正確的,這應該有用。

注意:如果你的實體或流暢的api中的錯誤仍然存​​在錯誤,你可以繪制數據庫圖表並檢查你是否按照你的要求獲得了關系

試試這種方式---

因為我假設產品和ProductEligiblity在一對多關系中。

foreach (var eligibleProduct in productEligibiltyes)
        { 
          Products products= new Products();
          products.ProductId=eligibleProduct.ProductId;
          products.ProductEligiblity.Add(eligibleProduct);
          Product.Attach(products);
          Entry(products).State = EntityState.Modified;
          Product.Add(products);
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM