![](/img/trans.png)
[英]Entity Framework 5 The relationship could not be changed because one or more of the foreign-key properties is non-nullable
[英]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.