Je vais comparer 2 scénarios pour ajouter des lignes Rsvp. Lequel préférez-vous en production?
Méthode 1: Ajout d'un nouvel objet Rsvp à la collection de Rsvp de datacontext
Rsvp r = new Rsvp();
r.AttendeeName = "xport";
r.DinnerId = 1;//there will be an exception if it is set to a Dinnner object that does not exist.
entities.Rsvps.AddObject(r);
entities.SaveChanges();
Nous aurons une exception si nous essayons de mettre DinnerID à un objet dîner qui n'existe pas. Ce comportement est cohérent et direct.
Méthode 2: Ajout d'un nouvel objet Rsvp à propriétés d'un objet Dîner de rsvps
Rsvp r = new Rsvp();
r.AttendeeName = "xport";
r.DinnerId = 10000;//this Dinner does not exist!
Dinner d = entities.Dinners.First(x => x.DinnerId == 1);
d.Rsvps.Add(r);
entities.SaveChanges();
Les DinnerID de propriétés de clé étrangère d'un objet Rsvp peut être réglé à un nombre quelconque. Lorsque cet objet Rsvp est ajouté à la collection Rsvps d'un objet Dinner, le DinnerId sera remplacé en mode silencieux. Exemple ci-dessus montre DinnerId est défini sur 10000 qui est un Id d'un objet Dinner qui n'existe pas. Est-ce un comportement inévitable?
Je pense que l'exception sera levée lors de l'exécution plutôt que lors de la compilation. Droite? – xport
Non - Si vous excluez vos clés étrangères du modèle, 'Rsvp' n'aura * pas * une propriété appelée' DinnerID' - et donc la classe générée/votre POCO ne le sera pas non plus. Donc essayer d'accéder à cette propriété va lancer une erreur de compilation C# parce que la propriété n'existe pas. Ce qui est exactement ce qui devrait arriver. – RPM1984
Dois-je exclure la clé étrangère manuellement? Ou peut-il être fait dans l'assistant EDM? Merci d'avance. – xport