Comment créer des relations de clé étrangère avec Entity Framework?

asp.net-mvc entity-framework foreign-key-relationship

Question

Je veux créer une nouvelle ligne dans ma base de données sur une table qui a quelques relations de clé étrangère et je n'ai pas été en mesure de déterminer l'ordre et les appels à effectuer. C'est ce que j'ai jusqu'ici:

db.Models.Order order = DB.Models.Order.CreateOrder( apple );
order.CustomerReference.Attach( ( from c in db.Customer where c.Id == custId select c ).First() );
db.SaveChanges();

Le code échoue sur la deuxième ligne en disant:

L'attache n'est pas une opération valide lorsque l'objet source associé à cette extrémité associée est dans un état ajouté, supprimé ou détaché. Les objets chargés à l'aide de l'option de fusion NoTracking sont toujours détachés.

Des idées?

Réponse acceptée

(Merci John pour les corrections de grammaire)

Alors je l'ai compris. Voici ce que vous devez faire:

db.Models.Order order = DB.Models.Order.CreateOrder( apple );
order.Customer = (from c in db.Customer where c.Id == custId select c).First();
db.SaveChanges();

J'espère que cela aide les gens.


Réponse populaire

Pourquoi ne pas utiliser les références d'entité? Votre méthode provoquera une instruction SELECT supplémentaire.

Un moyen bien plus agréable consiste à utiliser la classe CustomerReference et un EntityKey .

order.CustomerReference = new System.Data.Objects.DataClasses.EntityReference<Customers>();
order.CustomerReference.EntityKey = new EntityKey("ModelsEntities.Customers", "Id", custId);


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi