ApplyCurrentValues dans EF 4

.net entity-framework visual-studio-2010

Question

Je viens de jouer avec EF 4 dans VS 2010 RC et je viens de constater que ApplyCurrentValues ne fonctionne pas lorsque la propriété est de type bool et que la nouvelle valeur est fausse !!! ???
et cela fonctionne quand la nouvelle valeur est vraie.
Je ne sais pas s'il s'agit d'un bug ou s'il me manque quelque chose, mais je travaille simplement avec un travail très laid:

public void UpdateProduct(Product updatedProduct)
    {
        using (model)
        {
            model.Products.Attach(new Product { ProductID = updatedProduct.ProductID });
            model.Products.ApplyCurrentValues(updatedProduct);
            Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
            originalProduct.Discontinued = updatedProduct.Discontinued;
            model.SaveChanges();

        }

    }

une idée ou un meilleur travail autour?

Réponse acceptée

Vous avez associé un nouveau Product avec les valeurs par défaut pour toutes les propriétés bool (false). Vous définissez ensuite l'une de ces valeurs sur false. Pas de surprise, il ne met pas à jour; vous ne l'avez pas réellement changé! Il me semble que vous pourriez résoudre ce problème en supprimant une partie de votre code:

public void UpdateProduct(Product updatedProduct)
{
    using (model)
    {
        Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
        model.Products.ApplyCurrentValues(updatedProduct);
        model.SaveChanges();
    }
}

Même si vous n'aimez pas cela, essayez-le et voyez si cela fonctionne.

Il me semble maintenant que vous essayez d'éviter de charger le produit en premier lieu. Mais cela a brisé votre code. Ainsi, bien que je me pose des questions sur la tentative d’optimisation d’une mise à jour (vous chargez un enregistrement ici et que les mises à jour sont beaucoup moins fréquentes que celles sélectionnées), convenons de commencer par quelque chose qui fonctionne.

Si cela fonctionne, il vous indique ce que vous devez faire si vous souhaitez éviter de charger le produit pour la mise à jour: vous devez marquer toutes les propriétés comme modifiées .


Réponse populaire

Modifié:

public void UpdateProduct(Product updatedProduct)
{
    using (model)
    {
        model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
        model.Products.ApplyCurrentValues(updatedProduct);
        model.SaveChanges();
    }
}


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow