J'ai 3 entitésInsertion de plusieurs entités associées dans un db en utilisant Entity Framework, que fais-je de mal?
- imprimante
- serveur
- pilote
L'imprimante possède des propriétés du serveur et le pilote
Somwhere dans mon code, je l'ai mis en place un < IEnumerable Imprimante > où chaque instance de l'imprimante contient ses propres entités Serveur et Pilote.
Maintenant, quand je suis en train de le soumettre à la DB, je suis en utilisant le code suivant:
foreach (Printer p in printers)
{
printmanEntities _dc = new printmanEntities();
p.Driver = _dc.DriverSet.FirstOrDefault(d => d.Name == p.Driver.Name) ?? p.Driver;
p.Server = _dc.ServerSet.FirstOrDefault(s => s.Name == p.Server.Name) ?? p.Server;
_dc.AddToPrinterSet(p);
_dc.SaveChanges();
}
On suppose que je vais obtenir un enregistrement pour chaque objet imprimante, et un seul enregistrement pour chaque nom de pilote et serveur unique. Mais le résultat actuel est plutôt câblé.
Le code ci-dessus produit un enregistrement unique pour chaque objet Pilote unique, mais crée sans raison apparente plus d'un enregistrement pour chaque serveur unique. Et tous les enregistrements d'imprimante pointent vers un seul enregistrement de serveur.
En outre, si j'affecte p.Server en premier, alors je ne reçois que des enregistrements uniques pour les entités du serveur mais plusieurs enregistrements pour les entités du pilote.
Qu'est-ce que je fais mal?
Mise à jour: Remplacé EF avec LINQ2SQL et cela a fonctionné comme prévu. Une seule ligne pour chaque entité unique, rien de plus.
Comme câblé que cela puisse paraître, il ne retourne une valeur appropriée, et toutes les imprimantes de table db sont liées à bon serveur. Je suppose que je viens de trouver un bug filaire. –
Quelque chose d'autre se passe alors. Je ne peux pas dire quoi de l'exemple, mais je n'ai jamais vu Entity Framework faire ce genre de chose de façon incorrecte. –
Essayez ce code mis à jour. –