Vin*_*erg 51 entity-framework change-tracking
原来我相信
context.Configuration.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)
会禁用更改跟踪.但不是.目前我需要AsNoTracking()在所有LINQ查询上使用(对于我的只读层).是否有全局设置禁用DbContext上的跟踪?
Lad*_*nka 33
如何在派生的上下文中公开这样的方法并将其用于查询:
public IQueryable<T> GetQuery<T>() where T : class {
return this.Set<T>().AsNoTracking();
}
Run Code Online (Sandbox Code Playgroud)
AsNoTracking全局设置是不可能的.您必须根据每个查询或每个查询ObjectSet(不是DbSet)设置它.后一种方法需要使用ObjectContextAPI.
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var set = objectContext.CreateObjectSet<T>();
set.MergeOption = MergeOption.NoTracking;
// And use set for queries
Run Code Online (Sandbox Code Playgroud)
Amr*_*rhy 21
由于此问题未使用特定EF版本标记,因此我想提及在EF Core中,可以在上下文级别配置行为.
您还可以在上下文实例级别更改默认跟踪行为:
using (var context = new BloggingContext())
{
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var blogs = context.Blogs.ToList();
}
Run Code Online (Sandbox Code Playgroud)
Ale*_* I. 13
在EntityFramework.Core 中,这很容易。
为此,您可以使用UseQueryTrackingBehavior方法。
代码片段在这里:
services.AddDbContext<DatabaseContext>(options =>
{
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
options.UseSqlServer(databaseSettings.DefaultConnection);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22829 次 |
| 最近记录: |