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に基づいて挿入を取得するトランザクションテーブルがあります。コントローラからトランザクションを呼び出すこともできますが、すべてをデータアクセス層で実行したいので、最後の挿入/更新後にトランザクションを簡単に記述できます。
まず、上記の例は、汎用リポジトリを実装するための適切な方法です。次に、この方法で必要なデータを取得する方法はありますか?