Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用EF更新记录,附加时出错_C#_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 无法使用EF更新记录,附加时出错

C# 无法使用EF更新记录,附加时出错,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,我收到这个错误: “发生引用完整性约束冲突: 定义引用约束的属性值在关系中的主体对象和从属对象之间不一致。” 尝试从前端更新我的模型时。我做了一些研究,看到一篇帖子说我应该取消我的导航属性以防止出现这种情况,所以我做了,但没有运气。我也尝试过接触并获取所有导航属性,并完全填充它们,这样我就有了完整的对象,但这也不起作用 我正在使用一个非常好的“”来为我处理状态更改和所有事情。当它进入更新方法时,它正在附加记录,并在执行此操作时爆炸 下面是在我的WebApi控制器中设置对象的代码 public H

我收到这个错误:

“发生引用完整性约束冲突: 定义引用约束的属性值在关系中的主体对象和从属对象之间不一致。”

尝试从前端更新我的模型时。我做了一些研究,看到一篇帖子说我应该取消我的导航属性以防止出现这种情况,所以我做了,但没有运气。我也尝试过接触并获取所有导航属性,并完全填充它们,这样我就有了完整的对象,但这也不起作用

我正在使用一个非常好的“”来为我处理状态更改和所有事情。当它进入更新方法时,它正在附加记录,并在执行此操作时爆炸

下面是在我的WebApi控制器中设置对象的代码

public HttpResponseMessage Put(ProductModel product)
{
    if (!ModelState.IsValid)
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);

    var shopId = _uow.Repository<Shop>().GetShopIdByUserId("90f36c26-9b28-464d-869f-378015ae8f0c"); //work

    product.ShopId = shopId;

    var newProduct = Mapper.Map<Product>(product);
    newProduct.Category = null;

    try
    {
        _uow.Repository<Product>().Update(newProduct);
        _uow.Save();
    }
    catch (DbUpdateConcurrencyException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }

    return Request.CreateResponse(HttpStatusCode.OK);
}
我使用的是WebApi v2,EF 6

编辑:


我有一个不应该发送给EF的测试数据列表,我将其置零,现在它可以工作了。有趣的是,你可以看100倍的东西,但在别人告诉你做同样的事情之前,你不能让它点击,哈哈

您确定实体对象中的所有外键都已满足要求吗?omg。。你知道我取消了所有导航属性,但这是测试数据,我还没有上传图像,但我用测试数据填充了列表。因为它们根本不存在,我没想过要把它们清除掉。。。谢谢你,克斯特扬。这很有趣,我确定,但你的评论触发了我笑
public virtual void Update(TEntity entity)
{
    _dbSet.Attach(entity); // **Blows up here**
    ((IObjectState)entity).State = ObjectState.Modified;
}