Duplicar posible:
Entity Framework with NOLOCKcómo forzar Marco de la entidad de no bloquear la base de datos
estoy usando EF4 y .Net 4 a cargar algunos XML de un archivo en una base de datos .
Tengo una clase que rodea el ObjectContext y tiene métodos que agregan los objetos agrupados del archivo XML a las distintas EntityCollections que representan mis tablas.
Cada archivo XML contiene alrededor de 200,000 objetos en promedio, la clase contenedora crea el ObjectContext en la construcción y almacena la referencia en una variable de clase privada local que luego es utilizada por los métodos.
Cuando he terminado de crear las entidades que llaman:
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
Esto crea una transacción en el servidor que es según el diseño ADO.NET Entity Framework. Sin embargo, esta transacción bloquea por completo mi DB incluso en tablas a las que no se agrega.
he intentado varias cosas para tratar de conseguir alrededor de esto, como aislamientos guardar los cambios en un TransactionScope así:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
transaction.Complete();
}
También he intentado crear el TransactionScope antes de crear el ObjectContext en un intento de influir en el subyacente transacción que se utiliza durante SaveChanges.
Idealmente, me gustaría cargar varios archivos a la vez, pero esto será imposible si el DB está bloqueado durante los cambios de guardado.
¿Alguien conoce una solución a este problema? ¿Hay alguna posibilidad de forzar a EntityFramework a no usar una transacción?
Gracias por cualquier ayuda con anticipación.
James
Creo que el problema aquí es que está utilizando TransactionScopeOption.Supress. Intenta usar Requerido. –