2010-06-09 3 views
1

J'ai du mal à comprendre EntityFrameworkEntité Framework newbie question

J'ai une table appelée "Catégories", avec des colonnes "IdCategory, CategoryName". J'ai une table appelée "Pays", avec des colonnes "IdCountry, CountryName"

J'ai une table appelée "produit" avec des colonnes "idProduct, IdCategory, IdCountry, ProductName"

Lorsque je crée de EDM il cartographie les 3 entités. entité produit ont seulement 2 propriétés scalaires « idProduct, ProductName » et 2 Propriétés de navigation « Catégorie, Pays »

Le problème que je suis face est quand je veux créer un nouveau produit

Product p = new SalesContext.Produc(); 
p.IdProduct = 1; 
p.ProductName = "New Product"; 

Ce sont les seules les propriétés que je peux définir. Le problème est que je dois définir de IdCategory et IdCountry, mais ces propriétés n'existent pas dans l'entité de produit. Je les ai seulement comme propriétés de navigation.

Alors, comment puis-je mettre IdCategory et IdCountry avant d'appeler

SalesContext.AddProduct(p); 
SalesContext.SaveChanges(); 

S'il vous plaît aidez-moi!

Dev Enviroment: VS2008 sp1, .net 3.5 sp1, gagner 7.

Répondre

3

que vous avez correctement présumant défini les FKs dans la DB, vous devriez avoir des relations avec les autres tables, de sorte que vous pouvez changer votre code :

Product p = new SalesContext.Product(); 
p.IdProduct = 1; 
p.ProductName = "New Product"; 
p.Category = SalesContext.Categories.First(c => c.IdCategory == 1); 
p.Country = SalesContext.Countries.First(c => c.IdCountry == 2); 
SalesContext.AddProduct(p); 
SalesContext.SaveChanges(); 
+0

Merci pour votre aide Craig, Mais pourquoi dois-je aller une autre fois à la DB pour obtenir la catégorie et l'entité du pays. Si j'ai déjà maintenant la catégorie et le pays id pourquoi ne pas simplement définir les valeurs ajouter le produit au contexte et enregistrer les modifications? J'ai utilisé le même scénario auparavant avec Linq pour sql, et je n'avais pas besoin d'obtenir les informations de la base de données, juste de définir les identifiants. –

+2

Vous n'avez pas besoin de les lire depuis la base de données. J'essaie juste de vous lancer avec la chose la plus simple qui pourrait fonctionner. Si vous avez une solution de travail et que le profilage révèle qu'il s'agit d'un hotspot, vous pouvez essayer de l'optimiser. –