2

我正在使用 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 获得插入。我可以从控制器调用事务,但我宁愿在数据访问层中完成所有工作,这样我就可以在最后一次插入/更新后轻松编写事务。

首先,上面的例子是实现通用存储库的正确方法。其次有没有办法通过这种方法获取我想要的数据?

4

1 回答 1

0

当您在实体上调用 Add 并且表具有标识列(自动增量)时,您只需在 SaveChanges() 之后检查实体,它将包含生成的 ID。

于 2012-06-04T19:20:02.683 回答