Les valeurs précédentes doivent figurer dans votre objet.
Disons que vous avez une propriété ConcurrencyToken
:
public class MyObject
{
public Guid Id { get; set; }
// stuff
public byte[] ConcurrencyToken { get; set; }
}
vous pouvez maintenant définir ConcurrencyMode.Fixed
sur cette propriété. Vous devez également configurer votre base de données pour la mettre à jour automatiquement.
Lorsque vous interrogez la DB, il aura une certaine valeur:
var mo = Context.MyObjects.First();
Assert.IsNotNull(mo.ConcurrencyToken);
Maintenant, vous pouvez détacher ou sérialiser l'objet, mais vous devez inclure ConcurrencyToken
. Ainsi, si vous placez les données d'objet sur un formulaire Web, vous devez sérialiser ConcurrencyToken
en une chaîne et la placer dans une entrée masquée.
Lorsque vous ApplyChanges
, vous devez inclure le ConcurrencyToken
:
Assert.IsNotNull(myObject.ConcurrencyToken);
using (var context = new MyContext())
{
context.MyObjects.ApplyChanges(myObject);
context.SaveChanges();
}
Ayant ConcurrencyMode.Fixed
change le UPDATE
SQL. Normalement, il ressemble à:
UPDATE [dbo].[MyObject]
SET --stuff
WHERE [Id] = @0
Avec ConcurrencyMode.Fixed
il ressemble:
UPDATE [dbo].[MyObject]
SET --stuff
WHERE [Id] = @0 AND [ConcurrencyToken] = @1
... donc si quelqu'un a mis à jour la ligne entre le moment où vous lisez jeton et le moment où vous avez enregistré d'origine concurrency, le UPDATE
affecte 0 ligne au lieu de 1. L'EF renvoie une erreur de concurrence dans ce cas.
Par conséquent, si tout cela ne fonctionne pas pour vous, la première étape consiste à utiliser SQL Profiler pour examiner le UPDATE
généré.
POCO et STE (entités de suivi automatique) sont deux stratégies de génération t4 différentes qui ne peuvent pas être utilisées ensemble. Pouvez-vous clarifier ce que vous voulez dire? – jfar
Ils ne sont plus deux stratégies différentes. Vous pouvez avoir les deux. Voir http://blogs.msdn.com/adonet/ ou plus précisément vous pouvez obtenir les modèles ici http://visualstudiogallery.msdn.microsoft.com/en-us/23df0450-5677-4926-96cc-173d02752313 –
"Self Tracking Entities "est un template T4 totalement différent, voir plus d'informations sur le blog ado.net. POCO! = Entités auto-suivies. – jfar