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

时间:2013-12-20 14:20:19

标签: c# entity-framework asp.net-web-api

我收到此错误:

  

“发生了参照完整性约束违规:   定义参照约束的属性值在关系中的主对象和从属对象之间不一致。“

尝试从前端更新我的模型时。我做了一些研究,并看到一篇帖子说我应该取消导航属性,以防止这样做,所以我做了但没有运气。我也尝试过伸出并抓住所有导航属性并完全填充它们以便我有完整的对象,这也没有用。

我正在使用一个非常好的“generic repository”来处理状态变化以及我的一切。当它进入更新方法时,它会附加记录并在这样做时爆炸。

以下是在我的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);
}

这是用于更新的存储库实现。我不想触摸它,因为它是我正在使用的通用存储库框架的一部分。

public virtual void Update(TEntity entity)
{
    _dbSet.Attach(entity); // **Blows up here**
    ((IObjectState)entity).State = ObjectState.Modified;
}

我正在使用WebApi v2,EF 6。

编辑:

我有一个不应该发送到EF的测试数据列表,我已经把它弄清楚它现在可以正常工作了。有趣的是你怎么看100x的东西,但没有点击,直到有人告诉你做同样的事情哈哈!

0 个答案:

没有答案