我正在使用 Entity Framework/MVC3/Ninject.MVC3 开发一个通用存储库。界面看起来像这样。
public interface IRepository<TEntity> where TEntity : class
{
IQueryable<TEntity> Query { get; }
void Add(TEntity entity);
void Edit(TEntity entity);
void Delete(TEntity entity);
}
我的具体实现看起来像这样。
public class EFRepository<T> : IRepository<T> where T : class
{
private EFDbContext context = new EFDbContext();
public IQueryable<T> Query
{
get { return context.Set<T>().AsQueryable(); }
}
public void Add(T entity)
{
context.Set<T>().Add(entity);
context.SaveChanges();
}
public void Edit(T entity)
{
context.Entry<T>(entity).State = System.Data.EntityState.Modified;
context.SaveChanges();
}
public void Delete(T entity)
{
context.Set<T>().Remove(entity);
context.SaveChanges();
}
}
Ninject 具有约束力
kernel.Bind(typeof(IRepository<>)).To(typeof(EFRepository<>));
我需要做的是在具体实现中获取最后一个插入 ID。我有一个事务表,它将根据最后一个表和插入 ID 获得插入。我可以从控制器调用事务,但我宁愿在数据访问层中完成所有工作,这样我就可以在最后一次插入/更新后轻松编写事务。
首先,上面的例子是实现通用存储库的正确方法。其次有没有办法通过这种方法获取我想要的数据?