我正在寻找一些帮助或指针,解释更多关于使用T4模板生成整个数据访问层的信息。例如所有的INSERT等语句和实现它的C#方法。使用t4模板生成数据访问层
回答
你不应该那样做,而应该尝试使用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;
}
}
用这种“存储库”结构包装EF是没用的。该功能已由'DbSet'和'DbContext'提供。 – Stijn
@Haitham Shaddad我会用同样的词语:“你不应该这样做”。http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/ –
@Stijn该功能存在于DbSet中,但不能直接在域服务或UI层中使用它,如果要删除EntityFramework并使用另一个数据访问层,则不能在没有重构的情况下进行 –
- 1. 使用T4模板生成ViewModels
- 2. 访问T4模板编程
- 3. 用新名称生成T4模板库
- 4. 用于生成类型化数据集的T4模板
- 5. 如何访问ASP.NET MVC 3 T4模板中的视图生成器参数?
- 6. T4模板 - 适合生成C++代码?
- 7. 如何在T4模板中访问Entiydatamodel
- 8. 处理T4模板时访问HttpContext
- 9. 使用t4模板在运行时生成内存中的SQL
- 10. 添加自定义T4模板DDL生成模板DROPDOWNLIST
- 11. T4模板生成从数据库派生的GUI(aspx)的第一个剪辑?
- 12. T4模板和使用Server.Mappath
- 13. 通用多层数据访问模式?
- 14. SubSonic 3.0.0.3大型数据库上的t4模板生成用完了连接
- 15. T4模板新手问题
- 16. 从t4脚手架模板访问我的模型中的元数据(dataannotations)
- 17. T4生成器问题
- 18. T4模板中的数据表
- 19. 是否有可用于从xsd生成c#类的T4模板?
- 20. 用于生成灵魂文件相对路径的T4模板
- 21. Visual Studio 2010用于模板类型的T4代码生成
- 22. 使用django模板生成django模板
- 23. 构建从头开始的数据访问层vs由Visual studio自动生成的数据访问层
- 24. 在PHP中自动生成数据访问层
- 25. asp.net mvc 3 T4 View模板访问属性元数据(DisplayName,Description,UIHint)等
- 26. 使用Navicat访问n层数据库
- 27. 使用的HttpContext在数据访问层
- 28. 数据访问层设计模式
- 29. 数据访问层设计模式
- 30. Pug-Jade模板访问模块数据
为什么要生成数据访问层。 @Marco Munnik – zahed
任何你不想使用EF的理由?那么你不需要这个或者存储库模式,因为EF已经在实施存储库模式/工作单元。 –