Gat*_*aka 5 c# database multithreading entity-framework thread-safety
假设我们有一些ObjectContext(通过Entity Framework EDMX)和一些实体.从单个线程从DataBase完全加载的实体.只有在加载实体之后,我们才会启动一些线程,这些线程只会读取实体中的数据,并且没有对DataBase的查询.它是线程安全的操作吗?
是的,您可能还想考虑在ObjectSet上使用.AsNoTracking()来从Context中删除任何EF挂钩,以确保您纯粹在进行读取操作.使用.AsNoTracking()的另一个好处是它还会增加非常小的性能提升
以下是如何在提供程序中执行此操作的示例:
public class Provider<TEntity> where TEntity : class
{
protected IObjectSet<TEntity> _dbSet;
protected ObjectContext _context;
public Provider(ObjectContext context)
{
_context = context;
_dbSet = context.CreateObjectSet<TEntity>();
}
public virtual IEnumerable<TEntity> FindReadOnly(Expression<Func<TEntity, bool>> whereClause= null)
{
IQueryable<TEntity> dbSet = _dbSet.AsNoTracking();
if (whereClause!= null)
dbSet = dbSet.AsExpandable().Where(whereClause);
return dbSet;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |