Entity Framework “Une entité objet ne peut pas être référencé par plusieurs instances de IEntityChangeTracker”

J'obtiens l'erreur

Une entité objet ne peut pas être référencé par plusieurs instances de
IEntityChangeTracker

lorsque vous essayez de créer une nouvelle entité et l'enregistrer dans la bd.

Je comprends l'erreur et comment il se produit normalement, mais dans ce cas tout ce que je suis en train de faire est de créer une nouvelle entité et l'ajout d'un peu de ints avant l'enregistrement, mais pas en ajoutant toutes les autres entités à partir d'autres contextes.

J'ai inclus la fonction qui est la cause de l'erreur. Comme vous pouvez le voir, il est passé d'un EndProduct qui est une entité qui est suivie par un contexte différent de celui dans le _billableRepository, mais depuis que je ne suis pas en train dans de toute façon assigner l'entité nouvellement créée facturables je ne vois pas comment il peut être un problème.

Le seul moyen pour que je puisse voir l'erreur qui arrive, c'est parce qu'un couple de la int valeurs qui sont assignés à la nouvelle Billable sont prises à partir de l'existant EndProduct qui est suivie par un contexte différent, mais sûrement, le IEntityChangeTracker ne pas suivre les primitives d'une entité?

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();
        }
    }
}
  • Essayez ceci. _billableRepository.Facturables.Ajouter(facturable); _billableRepository.SaveChanges();
  • Êtes-vous de l'élimination de votre contexte correctement à chaque fois? Vous devez les initialiser avant de vous en avez besoin et d'en disposer dès que possible.
InformationsquelleAutor Anduril | 2016-06-23