我正在使用存储库模式开发一个.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事务。这对我很有帮助,谢谢你。
一些重要的链接: