Tableau avec un entity framework à deux foreign keys

J'ai une table qui se compose de 2 foreign keys. Et ce ne sont que des éléments de la table. La table est destinée à créer une association entre 2 autres tables. Par exemple: La table est Users_Products et les deux seules colonnes sont UserId et ProductID, les deux foreign keys. Lorsque j'ai généré l'object EF à partir de la database, il n'a pas créé d'object Users_Products, il a créé automatiquement les propriétés de navigation. Maintenant, comment puis-je insert des données dans ma table Users_Products en utilisant EF?

Vous pouvez get un object user et append un produit dans sa propriété de navigation.

User user = context.Users.Where(u => u.Id == 1); Product product = context.Products.Where(p => p.Id == 1); user.Products.Add(product); context.SaveChanges(); 

Pour des exemples de code qui montrent comment travailler avec des relations many-to-many dans EF, consultez la section Travailler avec des relations many-to-many dans Entity Framework 4.0 et ASP.NET – Getting Started, partie 5 .

C'est EF 4.0 / Database First; Pour un exemple utilisant l'API DbContext, voir Ajout d'assignations de cours à la page d'édition de l'instructeur dans Mise à jour des données associées avec Entity Framework dans une application ASP.NET MVC (6 sur 10) .

 using ( var ctx = new ...) { var user = new User(); var product = new Product(); user.Products.Add(product); ctx.Users.AddObject(user); ctx.SaveChanges(); } 

Si vous souhaitez créer une relation (insert un logging dans la table User_Products ), il vous suffit d'utiliser la propriété de navigation sur User ou Product :

 user.Products.Add(product); 

ou

 product.Users.Add(user); 

Cela signifie que vous devez avoir une propriété de navigation sur au less un côté pour pouvoir créer la relation. Si vous avez chargé des entités du concours en cours, vous pouvez utiliser l'approche décrite par @Pavel.

Si vous n'avez pas d'entités chargées ou si vous ne voulez pas faire deux requêtes à la database juste pour créer une relation, vous pouvez utiliser cette solution de contournement:

 // Make dummy objects for records existing in your database var user = new User() { Id = 1 }; var product = new Product() { Id = 1 }; // Ensure that your context knows instances and does not track them as new or modified context.Users.Attach(user); context.Products.Attach(product); // Again make relation and save changes user.Products.Add(product); ctx.SaveChanges();