0 votes

Linq to Entities - Incrémenter une colonne avec une clé primaire

J'ai ce code :

    Message message = new Message();
    message.Id = 5;
    message.EntityKey = context.CreateEntityKey("MessageSet", entity);
    message.Votes++;
    context.Attach(entity);
    context.ObjectStateManager.GetObjectStateEntry(entity.EntityKey).SetModifiedProperty("Votes");
    Save();

Mais bien sûr, les votes s'initialisent à 0.

Comment peut-on générer quelque chose comme

Update Messages set Votes=Votes+1 where Id = 5

? ? Merci

1voto

jrista Points 20950

LINQ to Entities étant un mappeur OR, l'idée générale est que vous devriez d'abord rechercher l'entité ou les entités que vous devez mettre à jour, les mettre à jour avec des objets dans le code, et lancer une commande Update sur l'ObjectContext pour persister les modifications apportées à ces entités. Il s'agit d'un élément clé, mais souvent difficile à saisir au début, mais la raison d'utiliser un ORM comme Entity Framework, NHibernate, LINQ to SQL, etc. est d'éliminer le besoin d'écrire du SQL, et d'utiliser des objets à la place.

Les éléments suivants devraient répondre à vos besoins :

Message msg = context.Messages.First(m => m.Id == 5);
msg.Votes += 1;

context.SaveChanges();

L'appel à SaveChanges génère des instructions SQL CUD, une pour chaque mise à jour, insertion et/ou suppression.

0voto

Paulo Santos Points 8148

Je ne pense pas que vous puissiez y parvenir directement. Fonctions d'importation et utiliser un SP pour faire ce dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X