繁体   English   中英

实体框架和ObjectContext的线程安全

[英]Entity Framework and Thread safety of ObjectContext

假设我们有一个带有某些实体的ObjectContext(通过Entity Framework EDMX)。 从一个线程从数据库完全加载的实体。 仅在加载实体后,我们才启动一些线程,这些线程将仅从实体读取数据,并且不查询数据库。 线程安全操作吗?

是的,您可能还需要考虑在ObjectSet上使用.AsNoTracking()从上下文中删除任何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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM