Question

J'utilise Entity Framework et une partie de mon code veux dire mettre 100 entités à la base de données. Certaines des entités que j'INSERTION DE ont plusieurs à plusieurs et je veux vous assurer que je n'insérez de nouveaux éléments. Il est facile de vérifier ceux qui existent déjà dans la db, mais si je l'ai déjà inséré dans ma session en cours pour conserver les 100 articles, je vais obtenir les éléments répétés.

La chose est la clé primaire sont simplement générés automatiquement et le caractère unique de la table provient d'une colonne unique qui ne sont pas pris en charge dans EF. Comment puis-je vérifier si je ne l'ai pas déjà inséré la partie de l'article de ma session EF 4.1? J'ai vu la méthode de recherche sur la DbContext mais que les principaux besoins primay que je ne peux pas utiliser. Étant donné que j'utilise 4.1, je suis coincé avec DBContext aussi. Comment puis-je avoir un moyen générique de vérifier?

Était-ce utile?

La solution

Si vous voulez utiliser EF vous devez coller avec PK comme identification unique de vos entités. Sinon, votre expérience de développement sera assez mauvais.

Si vous voulez vérifier si vous avez déjà traité le même élément dans l'utilisation du contexte actuel:

bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)

Si vous devez vérifier l'état de l'utilisation de l'entité:

EntityState state = context.Entry(entity).State;

Si vous devez vérifier si l'entité existe dans l'utilisation de la base de données:

YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);

La dernière déclaration est en fait pas une meilleure façon dans le système concurrent parce que lorsque vous appelez l'entité ne doit pas exister, mais une fois que vous appelez SaveChanges autre processus pourrait déjà inséré l'entité. Il n'y a pas moyen facile de faire face.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top