我做了如下配置
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);
}
获取错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
最佳答案
我注意到您的代码中有一个错误,可能会解决这个问题。实际上,在添加新对象 ProductEligibiltys.Add(eligibleProduct);
Entry(eligibleProduct).State = EntityState.Modified;
你应该删除这一行。最终代码将如下所示:
foreach (var eligibleProduct in productEligibiltyes)
{
ProductEligibiltys.Attach(eligibleProduct);
ProductEligibiltys.Add(eligibleProduct);
}
关于c# - Entity Framework 无法更改关系,因为一个或多个外键属性不可为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829450/