Question

Je suis en train EF 4 avec de POCO sur un petit projet pour la première fois. Dans ma mise en œuvre du référentiel, je veux fournir une AddOrUpdate méthode qui ajoutera un POCO passé dans le référentiel si c'est nouveau, sinon rien (comme sera sauvé Poco mis à jour lorsque SaveChanges est appelé).

Ma première pensée était de faire ceci:

public void AddOrUpdate(Poco p)
{
    if (!Ctx.Pocos.Contains<Poco>(p))
    {
        Ctx.Pocos.AddObject(p);
    }
}

Cependant que les résultats dans un NotSupportedException tel que documenté dans Variables non Referencing Scalar Non Pris en charge (question bonus: pourquoi serait-ce pas pris en charge)

Il suffit de retirer la partie Contains et appelant toujours les résultats de addObject dans un InvalidStateException:

Un objet avec la même clé déjà existe dans le ObjectStateManager. le objet existant est dans la Inchangé Etat. Un objet ne peut être ajouté à à nouveau le ObjectStateManager si elle est à l'état supplémentaire.

Il est donc clair 4 EF sait quelque part que c'est un doublon sur la clé.

Qu'est-ce qu'un propre, efficace pour le référentiel de mise à jour pour Pocos soit un nouveau ou d'un objet pré-existant lorsque AddOrUpdate est appelé ainsi que l'appel à la suite de SaveChanges () fera la bonne chose?

Je ne considère portant un drapeau isNew sur l'objet lui-même, mais je suis en train de prendre l'ignorance de la persistance dans la mesure que possible.

Était-ce utile?

La solution

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