EF 4.0 Performance Tips #7

Al final está saliendo una lista interesante de tips a tener en cuenta, y la verdad, cuando empecé a escribir esto no tenía intención que fuera tan grande, tendré que ponerlo blanco sobre negro y hacer un articulo para Krasis y Scribid :-).

Este último va a ser el más sencillo de todos, aunque seguramente para entenderlo hay que saber algunas cosas de infraestructura de EF, que ya comentamos en algunos post como aquí y aquí. Cada unos de los objetos de consulta de los que se dispone dentro de nuestros contextos de trabajo generados por Entity Framework poseen una propiedad llamada MergeOption la cual nos permite establecer que criterio deseamos establecer con respecto al seguimiento de las entidades consultadas. Algunas de las opciones de este enumerado están indicadas para el tratamiento de concurrencia como PreserveChanges y OverwriteChanges, pero básicamente las opciones a discutir son si se realiza  seguimiento de las entidades o no, AppendOnly o NoTracking. En escenarios dónde los contextos tienen ciclos de vida cortos, Short Lived Context, el uso del seguimiento de las entidades no aporta nada más que una sobrecarga que generalmente no necesitamos, la sobrecarga viene de los distintos ObjectStateEntry generados cuando tenemos seguimiento. Por eso, una recomendación facil de implementar y que nos puede aportar bastantes cosas es hacer que los distintos objetos de consulta ( ObjectSet u ObjectQuery, como les queráis llamar ) tengas establecida la opción NoTracking

IObjectSet<TEntity> CreateObjectSet()
{
            if (_context != (IContext)null)
            {
                IObjectSet<TEntity> objectSet = _context.CreateObjectSet<TEntity>();
                
                //set merge option to underlying ObjectQuery

                ObjectQuery<TEntity> query = objectSet as ObjectQuery<TEntity>;

                if ( query != null ) // check if this objectset is not in memory object set for testing
                    query.MergeOption = MergeOption.NoTracking;

                return objectSet;
            }
            else
                throw new InvalidOperationException(Resources.Messages.exception_ContainerCannotBeNull);
 }
 
Saludos
Unai Zorrilla
Published 11/9/2010 16:10 por Unai
Comparte este post:
http://geeks.ms/blogs/unai/archive/2010/09/11/ef-4-0-performance-tips-7.aspx

Comentarios

# EF 4.0: Performance Tips – Recopilacion

Después de una serie un poco grande de post sobre una temática concreta siempre está bien hacer una pequeña

Tuesday, September 28, 2010 11:43 AM por O bruxo mobile