我收到错误
尝试创建新实体并将其保存到数据库时。
我了解该错误及其通常的发生方式,但是在这种情况下,我要做的就是创建一个新实体,并在保存之前向其中添加一些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();
}
}
}
最佳答案
造成这种情况的最可能原因与您使用的任何依赖项注入(inject)工具有关。
每个工作单元只能播放一个DbContext
。如果您每次都要更换新的,请确保将旧的旧机器丢弃。
否则,您将具有相同上下文的多个实例并排运行。
这是变更跟踪器感到困惑的地方,无法跟踪对您的实体的更改。
关于c# - Entity Framework "An entity object cannot be referenced by multiple instances of IEntityChangeTracker",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37990476/