MVC3 EF Ninject通用存储库

时间:2012-06-04 17:35:59

标签: asp.net-mvc-3 entity-framework ninject

我正在使用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获取插入。我可以从控制器调用该事务,但我宁愿在数据访问层中完成所有操作,因此我可以在上次插入/更新后轻松编写事务。

首先,上面的示例是实现通用存储库的正确方法。第二种方法是通过这种方法获得我想要的数据吗?

1 个答案:

答案 0 :(得分:0)

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