我正在使用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获取插入。我可以从控制器调用该事务,但我宁愿在数据访问层中完成所有操作,因此我可以在上次插入/更新后轻松编写事务。
首先,上面的示例是实现通用存储库的正确方法。第二种方法是通过这种方法获得我想要的数据吗?
答案 0 :(得分:0)
当您在实体上调用Add,并且该表具有标识列(自动增量)时,您可以在SaveChanges()之后检查实体,它将包含生成的ID。