gpt4 book ai didi

asp.net - EF 存储库模式 - 更新逻辑

转载 作者:行者123 更新时间:2023-12-02 12:54:42 24 4
gpt4 key购买 nike

在 BLL 中

public void Update(Product product)
{
if (repository.GetProductById(product.ID) != null )
{
repository.Update(product);
}
else
{
// Display errorrs
}
}

在存储库中

public void UpdateProduct(Product product)

{

_dbContext.Entry(product).State = EntityState.Modified;

_dbContext.SaveChanges();

}



public Product GetProductById(int id)

{

return _dbContext.Products.Find(id);

}

当我运行网站时,它显示此错误

“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”

我知道发生了什么。当我调用 GetProductByID() 时,产品实体附加到 DbContext。因此,当我调用 Update() 时,它将复制 Product 实体。因为在 Update() 中我附加了 DbContext 中存在的实体。

解决它。我只调用Update()。但我想在更新/删除产品之前检查产品是否存在。

根据您的设计经验,如何很好地解决这个问题?

最佳答案

您可以像这样在数据库中查询断开连接的实体:

public Product GetProductById(int id)
{
return _dbContext.Products.AsNoTracking().SingleOrDefault(o => o.Id == id);
}

或者,您可以在代码中的其他地方进行这样的检查:

public bool ProductExists(int id)
{
return _dbContext.Products.Any(o => o.Id == id);
}

关于asp.net - EF 存储库模式 - 更新逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com