我有一个使用一个工作单元的数据层,它基本上是 EnityFramework 数据上下文的包装器。
随着所有异步等待的事情发生,我想我会开始尝试通过一些异步调用来使用这个数据层。(我一般是异步编程的新手)
我很快遇到了“已经有一个与此命令关联的开放数据读取器”错误的问题。
有没有让我的工作单元线程安全的好方法?或者我应该在我即将拨打电话时创建它的另一个实例(换句话说......要更加小心)。
有什么好的资源可以检查这样做吗?
我的几次谷歌搜索并不多,所以我想我会把这个问题带到 SO 上。
我的 Uow 看起来像这样。
public class MyUnitOfWork: IMyUnitOfWork, IDisposable
{
private MyDbContext DbContext { get; set; }
protected IRepositoryProvider RepositoryProvider;
public MyUnitOfWork(IRepositoryProvider repositoryProvider)
{
CreateDbContext();
repositoryProvider.DbContext = DbContext;
RepositoryProvider = repositoryProvider;
}
public MyUnitOfWork(IRepositoryProvider repositoryProvider, MyDbContext context)
{
DbContext = context;
repositoryProvider.DbContext = DbContext;
RepositoryProvider = repositoryProvider;
}
public void CreateDbContext()
{
DbContext = new MyDbContext();
//Serialization false if we enable proxied entities
DbContext.Configuration.ProxyCreationEnabled = false;
//avoid serilaization trouble
DbContext.Configuration.LazyLoadingEnabled = false;
}
public void Commit()
{
DbContext.SaveChanges();
}
public IRepository<Person> Persons {get { return repositoryProvider.GetRepo<Person>(); } }
public IRepository<SomeOtherEntityType> SomeOtherType {get { return repositoryProvider.GetRepo<SomeOtherEntityType>(); } }
// IDisposable
// ...
}