c# - Entity Framework 无法更改关系,因为一个或多个外键属性不可为空

标签 c# database entity-framework insert-update fluent

我做了如下配置

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/

相关文章:

c# - 关于时间和空间: Bloom filter, Hash table和Dictionary哪个好?

c# - .NET - 使用多个 SqlParameters 将异常记录到数据库并指定每个数据库列中的内容

c# - 为什么 dapper 查询会失败而 ado 调用不会失败?

c# - 从 ByteString 识别光栅(jpg、png 等)或 svg 文件格式

c# - 无法从配置值打开数据库连接

c# - 使用 HttpWebRequest 发布表单数据

database - 将测量数据保存到数据库或文件系统中

java - 如何使用 Java 显示我的数据库?

SQL 到 Entity Framework 计数分组

c# - Entity Framework Code First 关联/FK 问题和假设/默认值