任何人都可以和我分享工作单位的重要性。
我无法低估交易单位的确切重要性
如果任何人举例,它会非常棒 - 它对交易有用。
我的工作单位如下:
public class UnitOfWork : IUnitOfWork
{
private readonly IDataContext _dataContext;
private Dictionary<string, object> _repositories;
public UnitOfWork(IDataContext dataContext)
{
_dataContext = dataContext;
}
public int SaveChanges()
{
return _dataContext.SaveChanges();
}
public IRepository<TEntity, TKey> GetRepository<TEntity, TKey>() where TEntity : class
{
if (_repositories == null)
{
_repositories = new Dictionary<string, object>();
}
string key = String.Format("{0}|{1}", typeof(TEntity).Name, typeof(TKey).Name);
if (_repositories.ContainsKey(key))
{
return (IRepository<TEntity, TKey>)_repositories[key];
}
Type repositoryType = typeof(Repository<TEntity, TKey>);
_repositories.Add(key, Activator.CreateInstance(repositoryType, _dataContext));
return (IRepository<TEntity, TKey>)_repositories[key];
}
}
谢谢
任何例子都会有所帮助。
更新
Suppose -
_unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject);
_unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject);
如果第二个语句出现任何问题,那么它会回滚第一个语句吗?
请你举一些上面的例子..我无法理解它是如何运作的。
答案 0 :(得分:0)
如果第二个语句出现任何问题,那么它会回滚第一个语句吗?
正确。实际上,您可以对此进行测试,以确切了解它正在做什么。我建议在数据库上打开一个分析器并监视它从应用程序接收的命令,同时强制应用程序内的故障。这将显示实际发送到数据库的内容以及何时发送。
你在这里承诺你的工作单位:
public int SaveChanges()
{
return _dataContext.SaveChanges();
}
因此,在工作单元上调用SaveChanges()
之前,数据库中不会保留任何内容。它全部由工作对象单元维护在内存中。所以,如果你有这些行:
_unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject);
_unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject);
在您调用此更改之前,这些更改将不会持久存储到数据库中:
_unitOfWork.SaveChanges();