2012-06-04 69 views
2

我正在使用實體框架/ MVC3/Ninject.MVC3的通用知識庫。界面看起來像這樣。MVC3 EF Ninject通用知識庫

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

當你調用添加一個實體,並且該表有一個標識列(自動增量),那麼你可以在SaveChanges()後檢查實體,它將包含生成的ID。

+0

你能提供一個我如何從EFRepository類中獲得的例子嗎?從控制器我可以引用int id = myObject.PrimaryKey,但是如何直接從通用存儲庫獲取conext。 – Jeff

+0

@傑夫 - 你不知道。這是存儲庫的一個重點,你不知道它是如何運作的。您不需要從存儲庫獲取上下文,只需檢查爲其ID添加的對象。 –

+0

好吧,我只是尋找最簡單的方法插入數據到事務表中關於最後一次插入或更新。我需要知道表名和最後一個主鍵。我希望這可以通過這種方式提取,以便在完成保存後輕鬆觸發事務更新。 – Jeff