【问题标题】:Adding a new entry that has no foreign keys results in a "The relationship could not be changed [..]" error添加没有外键的新条目会导致“无法更改关系 [..]”错误
【发布时间】:2014-11-12 10:24:34
【问题描述】:

我遇到了一个奇怪的问题。当我部署我的代码时,一切正常。我可以将订单添加到我的系统中。但是,在下了一些命令后,我开始收到著名的错误:

The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

现在,我已经阅读了很多关于该错误的信息,但这对我的情况没有帮助。我有一个非常简单的数据库,没有任何外键:

我的代码如下所示:

    public NewOrder Create(NewOrder order)
    {
        var o = new WebshopOrder();
        o.AdvertId = order.AdvertId;
        o.DateCreated = DateTime.Now;
        o.IsActivated = order.OrderState > OrderState.Created;
        o.ProductId = order.Product.Id;
        o.UserId = order.UserId.ToString();

        Db.WebshopOrder.Add(o);
        Db.SaveChanges();

        return new NewOrder() { WebshopOrderId = o.Id};
    }

当我说 Db.SaveChanges() 时,这反过来又失败了。

知道这里到底有什么问题吗?

【问题讨论】:

  • 您确定您正在查看正确的表格吗?我问是因为 WebshopOrder 实体似乎与您的表(AdvertId,IsActivated)具有不同的属性。

标签: sql asp.net asp.net-mvc entity-framework entity-framework-5


【解决方案1】:

我目前看到了三种可能性:

  1. ProductId 以 NULL 形式发送到数据库
  2. OrderId 作为 NULL 发送到数据库
  3. 时间戳作为 NULL 发送到数据库

我认为它在抱怨这三列中的一列是唯一不允许 NULL 的列。我认为 ProductId 最有可能成为罪魁祸首,您的代码有时会被调用并带有一个值,而其他时候它会收到一个 NULL 产品。

这可能是问题,也可能不是问题,但您的代码有:

order.Product.Id

你想改用这个吗?

order.ProductId

如果将错误消息拆分为两个或多个错误,每个错误都更具体,则会得到改进。

【讨论】:

    【解决方案2】:

    我可以从您的问题中看到您正在查看订单表中的关系。

    相反,您必须查看 WebshopOrder 表中的任何关系,因为您正在保存 WebshopOrder

    Db.WebshopOrder.Add(o);
    Db.SaveChanges();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多