¿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);
});