L'ajout et la mise à jour des entités avec Entity Framework

Dans mon dernier projet, j'ai utilisé Entity Framework 5 le Premier Code. J'ai terminé mon projet, mais avait beaucoup de douleur pendant le processus de développement.

J'ai essayé d'expliquer ma douleur ci-dessous:

J'ai eu plusieurs classes de données dans ma logique d'accès aux données de la couche de Produit similaire, ProductCategory, à l'Ordre, Entreprise, Fabricant, etc... Chaque classe a des références à d'autres classes. Par exemple, une instance de Produit a un ProductCategory de la propriété.

À l'intérieur d'Ajouter et de méthodes de mise à Jour de mes Données d'Accès des classes d'Objets, je définir les états de chacun des biens (autres que les types primitifs) n'ont pas changé ou Modifié dans le contexte. Ci-dessous est une partie d'une méthode de mise à jour de certaines classe dao:

context.Entry(entity).State = System.Data.EntityState.Modified;
if (entity.Category != null)
    context.Entry(entity.Category).State = System.Data.EntityState.Unchanged;

if (entity.Manufacturer != null)
    context.Entry(entity.Manufacturer).State = System.Data.EntityState.Unchanged;

foreach (var specificationDefinition in entity.SpecificationDefinitions)
{
    context.Entry(specificationDefinition).State = System.Data.EntityState.Unchanged;
    foreach (var specificationValue in specificationDefinition.Values)
    {
        context.Entry(specificationValue).State = System.Data.EntityState.Unchanged;
    }
}

Ce code va comme ceci. Certains de mes ajouter ou mettre à jour les méthodes sont à environ 30 lignes de code. Je pense que je suis en train de faire quelque chose de mal, l'ajout ou la mise à jour d'une entité ne devrait pas être cette douleur, mais je n'ai pas mis les états des objets soit je obtenir exception ou des entrées en double dans la base de données. Dois-je vraiment définir l'état de chaque propriété qui correspond à la base de données?

Pouvez-vous ajouter le code dans lequel vous créez les données? Si vos références dans vos classes sont corrects, l'EF ne devrait créer tous les cas une fois.
Oui, il crée de toutes les instances à la fois. C'est le problème en fait. Laissez-moi vous expliquer le problème à nouveau. Dire que j'ai un exemple de Produit qui a un ProductType exemple à l'intérieur d'elle. Supposons que l'instance de Produit est déjà persisté dans le passé. Lorsque j'essaie de mettre à jour ce Produit instance, EF crée un double ProductType instance (qui est un cas que je ne veux pas) si je n'ai pas définir l'état de la ProductType attribut Inchangé.

OriginalL'auteur Furkan | 2013-07-22