2016-09-21 48 views
-1

我正在尋找一些幫助或指針,解釋更多關於使用T4模板生成整個數據訪問層的信息。例如所有的INSERT等語句和實現它的C#方法。使用t4模板生成數據訪問層

+1

爲什麼要生成數據訪問層。 @Marco Munnik – zahed

+1

任何你不想使用EF的理由?那麼你不需要這個或者存儲庫模式,因爲EF已經在實施存儲庫模式/工作單元。 –

回答

1

你不應該那樣做,而應該嘗試使用Generic Repository模式,最終只需使用一個單一的接口和一個使用泛型的實現,它可以用於模型中的任何類型。

public interface IRepository<T, K> where T : class 
    { 
     T Add(T item); 
     bool Update(T item); 
     bool DeleteById(K id); 
    } 

實施

public class EFRepository<T, K> : IRepository<T, K>, IDisposable where T : class 
    { 
     protected readonly DbContext _dbContext; 
     private readonly DbSet<T> _entitySet; 

     public EFRepository(DbContext context) 
     { 
      _dbContext = context; 
      _entitySet = _dbContext.Set<T>(); 
     } 

     public T Add(T item) 
     { 
      item = _entitySet.Add(item); 
      _dbContext.SaveChanges(); 
      return item; 
     } 

     public bool Update(T item) 
     { 
      _entitySet.Attach(item); 
      _dbContext.Entry(item).State = EntityState.Modified; 
      _dbContext.SaveChanges(); 
      return true; 
     } 

     public bool DeleteById(K id) 
     { 
      var item = _entitySet.Find(id); 
      _entitySet.Remove(item); 
      _dbContext.SaveChanges(); 
      return true; 
     } 
} 
+1

用這種「存儲庫」結構包裝EF是沒用的。該功能已由'DbSet'和'DbContext'提供。 – Stijn

+2

@Haitham Shaddad我會用同樣的詞語:「你不應該這樣做」。http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/ –

+2

@Stijn該功能存在於DbSet中,但不能直接在域服務或UI層中使用它,如果要刪除EntityFramework並使用另一個數據訪問層,則不能在沒有重構的情況下進行 –