工作单位如何能够提供单笔交易

时间:2014-07-21 13:25:14

标签: entity-framework repository unit-of-work

任何人都可以和我分享工作单位的重要性。

我无法低估交易单位的确切重要性

如果任何人举例,它会非常棒 - 它对交易有用。

我的工作单位如下:

     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);

如果第二个语句出现任何问题,那么它会回滚第一个语句吗?

请你举一些上面的例子..我无法理解它是如何运作的。

1 个答案:

答案 0 :(得分:0)

  

如果第二个语句出现任何问题,那么它会回滚第一个语句吗?

正确。实际上,您可以对此进行测试,以确切了解它正在做什么。我建议在数据库上打开一个分析器并监视它从应用程序接收的命令,同时强制应用程序内的故障。这将显示实际发送到数据库的内容以及何时发送。

你在这里承诺你的工作单位:

public int SaveChanges()
{
    return _dataContext.SaveChanges();
}

因此,在工作单元上调用SaveChanges()之前,数据库中不会保留任何内容。它全部由工作对象单元维护在内存中。所以,如果你有这些行:

_unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject);
_unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject);

在您调用此更改之前,这些更改将不会持久存储到数据库中:

_unitOfWork.SaveChanges();