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 を呼び出し、テーブルに ID 列 (自動インクリメント) がある場合、SaveChanges() の後にエンティティを確認するだけで、生成された ID が含まれます。

于 2012-06-04T19:20:02.683 に答える