2010-02-19 4 views
-1

Je rencontre des difficultés pour enregistrer des données dans une base de données. Fondamentalement, j'ai une table principale qui a des associations à d'autres tables (exemple ci-dessous).Enregistrement de données dans une base de données relationnelle (Entity Framework)

Tbl_Listing

  • ID
  • UserID - Associé à l'ID dans le tableau utilisateur
  • CategoryID - Associé à l'ID dans la catégorie Table
  • LevelID - Associé à l'ID dans le tableau de niveau.
  • Nom
  • Adresse

Normalement, il est facile pour moi d'ajouter des données à la base de données (en utilisant Entity Framework). Cependant, je ne suis pas sûr comment ajouter des données aux champs avec des associations. Les nombreux champs d'ID doivent juste contenir une valeur int qui correspond à l'ID dans la table associée.

Par exemple; lorsque j'essaie d'accéder à la colonne de la manière suivante, je reçois une "Référence d'objet non définie sur une instance d'un objet". Erreur.

Listing NewListing = new Listing(); 
NewListing.Tbl_User.ID = 1; 
NewListing.Tbl_Category.ID = 2; 
... 

DBEntities.AddToListingSet(NewListing); 
DBEntities.SaveChanges(); 

J'utilise NewListing.Tbl_User.ID au lieu de NewListing.UserID car le champ UserID n'est pas disponible par IntelliSense.

Si j'essaie de créer un objet pour chaque champ connexe, j'obtiens un "La relation entre les deux objets ne peut pas être définie car ils sont attachés à différents objets ObjectContext." Erreur.

Avec cette méthode, j'essaie d'ajouter l'objet sans le .ID montré ci-dessus - exemple NewListing.User = UserObject.

Je sais que cela devrait être simple car je veux juste faire référence à l'ID de la table associée dans le tableau principal de la liste. Toute aide serait grandement appréciée.

Merci à l'avance,

S

Répondre

2

En général, avec Entity Framework vous n'utilisez pas l'ID: s des clés étrangères, au lieu que vous utilisez des références. Au lieu de définir l'ID, vous définissez la propriété de la table associée.

Dans votre cas, ce serait quelque chose comme ceci:

Listing newListing = new Listing(); 
newListing.Tbl_User = DBEntities.Users.Single(u=>u.ID == 1); 
newListing.Tbl_Category = DBEntities.Categories.Single(c=>c.ID == 2); 
... 

DBEntities.AddToListingSet(newListing); 
DBEntities.SaveChanges(); 

Dans Entity Framework 4 (venir avec .NET 4.0), vous serez en mesure d'utiliser une syntaxe plus simple plus comme ce que vous attendiez.

Vous pouvez jeter un oeil à ce article sur msdn où vous pouvez en lire plus à ce sujet!

+0

Merci, cela fonctionne bien. J'ai dû changer Single() à First() car Single() n'est apparemment pas supporté par Linq To Entities. Merci encore! – sheefy

Questions connexes