我收到错误
实体对象不能被多个实例引用
IEntityChangeTracker
当尝试创建新实体并将其保存到数据库时。
我了解该错误以及它通常是如何发生的,但在这种情况下,我所做的就是创建一个新实体并添加一些int
在保存之前添加到它,而不是从其他上下文添加任何其他实体。
我已经包含了导致错误的函数。正如你所看到的,它正在被传递EndProduct
这是一个被不同上下文跟踪的实体_billableRepository
,但由于我并没有试图以任何方式将该实体分配给新创建的可计费实体,所以我不认为这会成为问题。
我能看到错误发生的唯一方法是因为有几个int
被分配给新的值Billable
均取自现有的EndProduct
这是由不同的上下文跟踪的,但肯定是IEntityChangeTracker
不跟踪实体的各个基元?
public void AddBillable(EndProduct endProduct, int? purchaseId, string centreCode, int userId)
{
if (endProduct.Product != null)
{
var existingBillableForUserForProductId = _billableRepository.GetQuery(b => b.UserId == userId && b.ProductId == endProduct.ProductId);
if (endProduct.BillablePartId != null && !existingBillableForUserForProductId.Any())
{
var billable = new Billable {
ProductId = endProduct.ProductId.Value, //int
UserId = userId, //int
PartId = endProduct.BillablePartId.Value, //int
DateAdded = DateTime.UtcNow, //datetime
PurchaseId = purchaseId, //int
CentreCode = centreCode //string
};
_billableRepository.Add(billable); //error here
_billableRepository.UnitOfWork.SaveChanges();
}
}
}
最可能的原因是与您正在使用的任何依赖项注入工具有关。
应该只有一个DbContext
在每个工作单元中发挥作用。如果您每次都更换新的,请确保将旧的处理掉。
否则,您将拥有同一上下文的多个实例并排运行。
这是更改跟踪器感到困惑并且无法跟踪实体更改的地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)