Entity framework 工作单元如何能够提供单个事务

Entity framework 工作单元如何能够提供单个事务,entity-framework,repository,unit-of-work,Entity Framework,Repository,Unit Of Work,谁能告诉我单位工作的意义是什么 我不能低估交易工作单位的确切重要性 如果有人举个例子——它对交易有多有用,那就太好了 我的工薪班单位如下: public class UnitOfWork : IUnitOfWork { private readonly IDataContext _dataContext; private Dictionary<string, object> _repositories; public UnitOfWork(IDat

谁能告诉我单位工作的意义是什么

我不能低估交易工作单位的确切重要性

如果有人举个例子——它对交易有多有用,那就太好了

我的工薪班单位如下:

     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];
    }
}
公共类UnitOfWork:IUnitOfWork
{
私有只读IDataContext\u dataContext;
私人词典库;
公共UnitOfWork(IDataContext数据上下文)
{
_dataContext=dataContext;
}
公共int SaveChanges()
{
返回_dataContext.SaveChanges();
}
public IRepository GetRepository(),其中tenty:class
{
如果(_==null)
{
_存储库=新字典();
}
string key=string.Format(“{0}{1}”,typeof(tenty).Name,typeof(TKey).Name);
if(_repositories.ContainsKey(键))
{
返回(IRepository)_存储库[键];
}
类型repositoryType=typeof(存储库);
_Add(key,Activator.CreateInstance(repositoryType,_dataContext));
返回(IRepository)_存储库[键];
}
}
多谢各位

任何例子都会有帮助

更新:

     Suppose - 


                   _unitOfWork.GetRepository<ModelObject, int>().Update(MOdelObject);
                   _unitOfWork.GetRepository<ModelObject, int>().Delete(MOdelObject);
假设-
_unitOfWork.GetRepository().Update(MOdelObject);
_unitOfWork.GetRepository().Delete(MOdelObject);
若第二条语句出现任何问题,它会回滚到第一条语句吗

你能举一些如上所述的例子吗。。我不明白它是怎么工作的

若第二条语句出现任何问题,它会回滚到第一条语句吗

对。事实上,你可以测试它,看看它到底在做什么。我建议在数据库上打开一个探查器,监视它从应用程序接收到的命令,同时强制应用程序出现故障。这将显示实际发送到数据库的内容以及发送时间

您在此处提交您的工作单元:

public int SaveChanges()
{
    return _dataContext.SaveChanges();
}
因此,在对工作单元调用
SaveChanges()
之前,不会将任何内容持久化到数据库中。所有这些都由工作对象的单位保存在内存中。因此,如果您有以下几行:

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

在线上提供了“工作单元”的简明定义:有什么具体的东西你不了解吗?更新了一些示例细节的问题。这是因为下面的内容,我们检查是否已经为某个实体创建了存储库实例,然后检索或创建新实例?然后,当发布时,我的意思是,实体将保留在内存中,我们应该在何时从存储库实例中删除/处置/分离<代码>。。。if(_repositories.ContainsKey(key)){return(IRepository)_repositories[key];}Type repositoryType=typeof(Repository)_Add(key,Activator.CreateInstance(repositoryType,_dataContext))@user3711357:我不太熟悉您在这里创建存储库的方式,这对我来说似乎有点不必要。但我可以想象,通过该数据上下文创建的任何存储库都将成为该数据上下文工作单元的一部分。
_unitOfWork.SaveChanges();