J'utilise d'abord le code EF 4.1. J'ai deux classes:Entity Framework 4.1 Création d'entrées de recherche en double
public class Product {
public int ID { get; set; }
public string Name { get; set; }
public int ProductTypeID { get; set; }
public virtual ProductType ProductType { get; set; }
}
public class ProductType {
public int ID { get; set; }
public string Name { get; set; }
}
Si j'ai quelques ProductTypes existantes que je l'ai déjà créé (ID 2,3,4 par exemple), et je tente d'attribuer à l'un de ces ProductTypes à un nouveau produit, il va créer un duplicata du type de produit.
Par exemple, si mon plus grand ProductTypeID est 4, et j'exécutez le code suivant, il produira un double:
Expression<Func<ProductType, bool>> expr = s => s.ID == 2;
ProductType t = DBContext.Set<ProductType>().Where(expr).First();
Product p = new Product();
p.ProductType = t;
DBContext.SaveChanges();
Cela fait créer une nouvelle ligne dans la table « ProductType ». Le nouveau ProductType sera identique à celui avec l'ID 2, mais il aura le nouvel ID 5. Tout ce que j'essaie de faire est d'associer le type avec ID = 2 à mon nouveau produit. Une idée de ce que je fais mal?
Je ne peux pas reproduire votre problème - Cela fonctionne correctement pour moi. Même si je ne vous vois pas ajouter d'objets aux contextes, voir la réponse d'Adi ci-dessous pour commencer. Si cette réponse n'est pas correcte, veuillez poster plus de code. – anon
Vous avez raison. J'ai essayé de le simplifier, et j'ai négligé d'afficher le problème réel. J'essayais d'implémenter un modèle de référentiel et j'ai fini par créer deux objets DBContext distincts (un pour le produit et un pour le type). Après avoir réparé ça, ça a marché! – RepDetec
Pourriez-vous peut-être partager quelques recherches sur ce sujet car je me bats avec le même problème en ce moment et voudrais comprendre ce que je fais mal. –