2016-09-21 75 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并使用另一个数据访问层,则不能在没有重构的情况下进行 –