Entity Framework La excepción de simultaneidad optimista no ocurre

Tenemos una aplicación ASP.Net MVC que usa EF4 como su capa de acceso a datos y estamos viendo un comportamiento inesperado con respecto a que OptimisitcConcurrencyExceptions no se produce cuando creemos que deberían serlo.

Hemos simplificado el problema hasta el siguiente código ...

   using System.Linq;
    using Project.Model;

    namespace OptimisticConcurrency
    {
        class Program
        {
            static void Main()
            {
                Contact firstContact = null;
                using (var firstEntities = new ProjectEntities())
                {
                    firstContact = (from c in firstEntities.Contacts 
                       where c.LastName == "smith" select c).Single();
                }

                using (var secondEntities = new ProjectEntities())
                {
                    var secondContact = (from c in secondEntities.Contacts 
                       where c.LastName == "smith" select c).Single();

                    secondContact.Title = "a";
                    secondEntities.SaveChanges();
                }

                firstContact.Title = "b";

                using (var thirdEntities = new ProjectEntities())
                {
                    var thirdContact = (from c in thirdEntities.Contacts 
                       where c.LastName == "smith" select c).Single();

                    thirdContact.Title = firstContact.Title;

                    //EXPLICITLY SET VERSION HERE
                    thirdContact.Version = firstContact.Version;  

                    thirdEntities.SaveChanges();
                }
            }
        }
    }

Esta es una versión bastante simple de lo que sucede en nuestra aplicación MVC, pero ocurre el mismo problema.

Cuando llamamos a SaveChanges en thirdEntities, espero la excepción y no se lanza nada.

Mucho más interesante, cuando adjuntamos el Analizador de SQL, vemos que la Versión se está utilizando en la cláusula where, pero se está utilizando el valor de la Versión de ThirdEntities (el actual en la base de datos), no los valores de firstEntities A pesar de que se establezca explícitamente inmediatamente antes de llamar a SaveChanges. SaveChanges está restableciendo la versión para que sea el valor recuperado, no el valor establecido.

En el EDMX, la Versión está configurada para que un StoreGeneratedPattern esté configurado como Computado.

¿Alguien tiene alguna idea de lo que está pasando aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta