Я получаю ошибкуEntity Framework «Объект лицо не может ссылаться несколько экземпляров IEntityChangeTracker»
Объект объект не может ссылаться несколько экземпляров IEntityChangeTracker
при попытке создать новый объект и сохранить его в БД.
Я понимаю ошибку и то, как она обычно происходит, но в этом случае все, что я делаю, это создание нового объекта и добавление к нему перед ним int
s, а не добавление каких-либо других объектов из других контекстов.
Я включил функцию, вызывающую ошибку. Как вы видите, это передается EndProduct
, который является объектом, который отслеживается другим контекстом, чем тот, который находится в _billableRepository
, но поскольку я не пытаюсь в любом случае назначить этот объект для вновь созданного оплачиваемого, я не как это может быть проблемой.
Единственный способ, которым я могу видеть, ошибка происходит потому, что несколько из int
значений, которые назначены на новый Billable
взяты из существующих EndProduct
, который отслеживается с помощью другого контекста, но верно IEntityChangeTracker
Безразлично» t отслеживать отдельные примитивы объекта?
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();
}
}
}
Попробуйте это. _billableRepository.Billable.Add (оплачиваемый); _billableRepository.SaveChanges(); – NEER
Вы правильно распоряжаетесь своим контекстом каждый раз? Вы должны инициализировать его прямо перед тем, как он вам понадобится, и утилизировать его как можно скорее. –