¿Configuración global para AsNoTracking()?

¿Configuración global para AsNoTracking()?

¿Qué tal simplemente exponer un método como este en su contexto derivado y usarlo para consultas:

public IQueryable<T> GetQuery<T>() where T : class {
    return this.Set<T>().AsNoTracking();
}

Ajuste AsNoTracking globalmente no es posible. Debe establecerlo por cada consulta o por cada ObjectSet (no DbSet ). El último enfoque requiere el uso de ObjectContext API.

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var set = objectContext.CreateObjectSet<T>();
set.MergeOption = MergeOption.NoTracking;
// And use set for queries

Dado que esta pregunta no está etiquetada con una versión específica de EF, quería mencionar eso en EF Core el comportamiento se puede configurar a nivel de contexto.

using (var context = new BloggingContext())
{
    context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

    var blogs = context.Blogs.ToList();
}

En EntityFramework.Core es muy fácil.

Para ello, puede utilizar el método UseQueryTrackingBehavior.

El fragmento de código está aquí:

services.AddDbContext<DatabaseContext>(options =>
{
    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
    options.UseSqlServer(databaseSettings.DefaultConnection);
});