2011-05-24 2 views
8

Est-ce que quelqu'un sait si nous pouvons exclure la mise à jour d'une colonne dans Entity Framework 4.1 Code First? Par exemple, j'ai un champ 'CreatedOn' que je ne veux pas inclure lors de l'édition/des mises à jour. Est-ce possible, c'est-à-dire en excluant sélectivement le champ de l'opération de mise à jour dans le code EF First 4.1?Exclure la colonne d'être modifiable dans Entity Framework 4.1 Code d'abord

+0

Comment avez-vous finalement résolu cela? La réponse ne fournit que des suggestions. –

Répondre

15

Si vous travaillez avec des entités attachées, EF ne générera des mises à jour que pour les champs qui ont été modifiés. Si vous travaillez avec des entités détachées, vous devez indiquer manuellement à EF ce qui a changé. Si vous appelez ceci:

context.Entry(yourEntity).State = EntityState.Modified; 

Vous dites EF que toutes les propriétés doivent être modifiées. Mais si vous appelez au lieu ceci:

context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = true; 

vous dire que seul SomeProperty est modifié (que cette propriété sera mise à jour). Je ne suis pas sûr si vous pouvez faire l'opération inverse en marquant l'entité entière comme modifiée et sélectionnez les propriétés qui ne devraient pas être modifiées mais vous pouvez le tester vous-même.

Si votre CreatedOn est rempli dans la base de données, vous pouvez le marquer comme DatabaseGeneratedOption.Identity et il ne sera jamais modifié par votre application.

+0

Existe-t-il un moyen d'exclure une colonne de select? J'ai une entité 'User' et je veux que la colonne' Password: varbinary (32) 'soit sélectionnée sur demande seulement, est-ce possible? – Shimmy

+2

L'opération inverse fonctionne aussi (au moins dans EF5, où j'ai testé). Cela signifie que vous pouvez d'abord appeler 'context.Entry (yourEntity) .State = EntityState.Modified' puis' context.Entry (youreEntity) .Property (e => e.SomeProperty) .IsModified = false' afin de mettre à jour tout colonnes sauf celles qui sont exclues manuellement. –

+0

@FlorinDumitrescu: Oui ce travail dans EF5 avec .NET 4.5 mais pas avec .NET 4.0. –

Questions connexes