【发布时间】:2017-04-12 09:07:58
【问题描述】:
我使用 Entity Framework 6.0 和 Repository 设计模式开发了一个 ASP.NET MVC 应用程序来管理项目。现在我想集成事务以确保某些插入/更新数据库操作尊重 ACID 主体,尤其是原子性主体。
下面是我的通用存储库的 sn-ps:
1.通用存储库接口
public interface IGenericRepository<T> : IRepository where T : BaseEntity
{
void Create(T entity);
void Delete(T entity);
IEnumerable<T> GetAll();
void Update(T entity);
}
2。通用存储库类
public abstract class GenericRepository<T> : IGenericRepository<T> where T : BaseEntity
{
protected IContext _context;
protected IDbSet<T> _dbset;
public GenericRepository(IContext context)
{
_context = context;
_dbset = _context.Set<T>();
}
public virtual void Create(T entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
_dbset.Add(entity);
_context.SaveChanges();
}
public virtual void Update(T entity)
{
if (entity == null) throw new ArgumentNullException("entity");
_context.Entry(entity).State = System.Data.Entity.EntityState.Modified;
_context.SaveChanges();
}
public virtual void Delete(T entity)
{
if (entity == null) throw new ArgumentNullException("entity");
_dbset.Remove(entity);
_context.SaveChanges();
}
public virtual IEnumerable<T> GetAll()
{
return _dbset.AsEnumerable<T>();
}
}
3.我的 Icontext 实现
public interface IContext
{
IDbSet<Projet> Projects { get; set; }
IDbSet<Task> Tasks{ get; set; }
IDbSet<Entite> Entities { get; set; }
DbSet<TEntity> Set<TEntity>() where TEntity : class;
DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
int SaveChanges();
}
4.项目实体
public class ProjectRepository : GenericRepository<Projet>, IProjectRepository
{
IContext _context;
public ProjectRepository(IContext context) : base(context)
{
_context = context;
_dbset = _context.Set<Projet>();
}
public Projet GetProjectById(int Id)
{
return _dbset.FirstOrDefault(x=>x.Id == Id);
}
}
所以,我想做的是让交易与上面的模型一起工作。 例如,当使用他的任务创建项目时,我想使用事务来保存项目和任务实体,因此我确信这些实体的插入将是原子操作。
感谢您的帮助和建议。
【问题讨论】:
-
在 Stack Overflow,这个问题被认为过于宽泛或主要基于意见。由于它的 工作 代码本身没有问题,CodeReview 可能更适合这个问题。
-
至于意见:
SaveChanges不属于存储库。你不能没有一个工作单元。 -
工作单元不是必须的,实体框架已经实现了这个设计模式。
标签: asp.net-mvc c#-4.0 entity-framework-6 repository-pattern transactionscope