2009-03-04 8 views
1

J'essaie de comprendre comment ajouter de nouveaux enregistrements à une table ayant une clé étrangère dans une autre table en utilisant LINQ to Entities. Je vais essayer et expliquer:Créer un nouveau LINQ aux entités Objets avec des associations

Dites que j'ai une base de données simple avec deux tables. Par exemple, appelons un LibraryItem et l'autre LibraryItemStatus. Le LibaryItem a une clé étrangère à la table LibraryItemStatus afin qu'un état peut être affecté à un élément.

Ma question est de savoir comment créer un LibraryItem en utilisant LINQ To Entities et l'associer à un statut? Mon code ci-dessous doit être faux mais je ne trouve aucun exemple pour vous aider.

LibraryEntities entities = new LibraryEntities(); 

LibraryItem item = new LibraryItem(); 
item.Name = "some name"; 
item.SomeAttribute = "x"; 
// What do I do here? 
// This seems wrong as I don't want a new status. 
item.Status = new Status() { id = 1 }; 
// This seems wrong as I don't really want to have to query the repository 
item.Status = entities.Status.First(s => s.StatusID == 1); 
// 
entities.AddToItems(item); 
entities.Savechanges(); 

Répondre

0

C'est la "bonne":

item.Status = entities.Status.First(s => s.StatusID == 1); 

ou:

item.Status = entities.GetObjectByKey(new EntityKey("MyContext.Status", "StatusID", 1)); 

... qui se charge de la mémoire si l'objet est déjà chargé (entities.Status.First sera toujours interroger la base de données).

C'est le "hacky mais plus rapide façon":

item.StatusReference.EntityKey = new EntityKey("MyContext.Status", "StatusID", 1); 

Bon: Jamais toute question. Mauvais: Vous ne pouvez pas référencer item.Status; ce sera toujours nul.

Mise à jour: There will be a better way to do this in .NET 4.0.

0

Vérifiez une propriété item.StatusReference. Cela permet de découvrir/définir des métadonnées sur la relation sans réellement l'interroger.

0

Vous pouvez également mapper la table en rapport avec votre ItemEntity dans le entitymodel.

Je l'ai fait pour ProductName dans Product -> ProductLanguage dans mon projet publié sur l'url ci-dessous.

openticket.codeplex.com

Questions connexes