如何在存储库模式中实现实体框架事务?

时间:2016-11-23 18:10:01

标签: c# .net entity-framework transactions repository-pattern

我正在使用存储库模式开发一个.net项目,没有关系数据库的Entity Framework。在沿着存储库模式使用实体框架事务时,我遇到了困难。到目前为止,我找不到任何适当的方法来实现存储库模式的实体框架事务。

实体框架事务的工作方式如下:

using (var dbContextTransaction = _db.Database.BeginTransaction())
{
    try
    {
        _db.Student.Add(aObj);
        _db.SaveChanges();

        bObj.StudentId = aObj.StudentId;
        _db.StudentDeails.Add(bObj);
        _db.SaveChanges();

        dbContextTransaction.Commit();
    }
    catch (Exception)
    {
        dbContextTransaction.Rollback();
    }
} 

我的存储库界面看起来像这样:

public  interface IGenericRepository<T> : IDisposable where T : class
{
    IEnumerable<T> SelectAll();
    T SelectedById(object id);
    void Insert(T obj);
    void Update(T obj);
    void Delete(object id);
    void Save();
}

我从界面实现的存储库类:

public class GenericRepositoryInv<T> : IGenericRepository<T> where T : class
{
    private readonly EntitiesInventory _db;
    private readonly DbSet<T> _aTable;

    public GenericRepositoryInv(EntitiesInventory db)
    {
        _db = db;
        _aTable = _db.Set<T>();
    }

    public GenericRepositoryInv()
    {
        _db = new EntitiesInventory();
        _aTable = _db.Set<T>();
    }

    public void Dispose()
    {
        _db.Dispose();
    }

    public IEnumerable<T> SelectAll()
    {
        return _aTable.ToList();
    }

    public T SelectedById(object id)
    {
        return _aTable.Find(id);
    }

    public void Insert(T obj)
    {
        _aTable.Add(obj);
    }

    public void Update(T obj)
    {
        _aTable.Attach(obj);
        _db.Entry(obj).State = EntityState.Modified;
    }

    public void Delete(object id)
    {
        T find = _aTable.Find(id);
        _aTable.Remove(find);
    }

    public void Save()
    {
        try
        {
           _db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}

请指导我,以便我可以使用存储库模式实现Entity Framework事务。这对我很有帮助,谢谢你。

一些重要的链接:

0 个答案:

没有答案