请求处理期间是否可以进行线程切换

时间:2014-01-11 20:31:52

标签: asp.net-mvc threadstatic

我有一个MVC应用程序,它也使用EF和一个简单的工作单元模式实现。 这是我UnitOfWork的样子:

public class UnitOfWork : IUnitOfWork
{
    [ThreadStatic]
    private static UnitOfWork _current;

    private MyContext _context;

    public static UnitOfWork Current
    {
        get { return _current; }
    }

    public UnitOfWork()
    {
         _current = this;
    }

    public MyContext GetContext()
    {
        if(_context == null)
            _context = new MyContext();

        return _context;
    }

    public int Commit()
    {
        return _context == null ? 0 : _context.SaveChanges();
    }

    public void Dispose()
    {
        _current = null;

        if(_context != null)
            _context.Dispose();
    }
}

我有一个通用的存储库,它封装了常见的数据库操作:

public class GenericRepository<TEntity, TEntityKey> where TEntity : class
{
    private MyContext _context;

    private MyContext Context
    {
        get { return _context ?? (_context = UnitOfWork.Current.GetContext()); }
    }

    public void Add(TEntity newEntity)
    {
       _context.Set<TEntity>().Add(newEntity);
    }

    //Other methods...
}

如何使用:

using(var unitOfWork = _unitOfWorkFactory.Create())
{
    _repository.Add(newEntity);
    unitOfWork.Commit();
}

所以,问题是,是否有可能,MVC框架在处理请求时在内部切换线程。由于当前UnitOfWork是线程静态的,因此在调用NullReferenceException时此类切换会导致UnitOfWork.Current(如果我不正确,请更正)。

0 个答案:

没有答案