您在数据访问类中添加了什么?源代码或类图很好。 成员是静态的吗? 你有什么辅助功能?
我不是要求一个comlete DA类。我可以建立那个。只是寻找一些建议/反馈。
答案 0 :(得分:1)
我们使用Entity Framework作为我们的数据访问层。
我们之前使用过存储库模式,其中的类使用Enterprise Library Data Application Block访问数据库,并接受和/或返回数据传输对象。
在某些情况下,我们使用EF节省了90%。
答案 1 :(得分:1)
我使用自制的DataAccess图层,它看起来像这样:
public class HoneyOpposumDAO : DataAccessObject<lots of generics>
{
public ICollection<HoneyOpposum> Select(Filter filter);
public ICollection<HoneyOpposum> Select();
public HoneyOpposum FindByApplicationId(int id);
internal HoneyOpposum FindByDatabaseId(int id);
void Register(HoneyOpposum o);
void Commit(HoneyOpposum o);
void CancelEdit(HoneyOpposum o);
void Save();
void Save(Filter filter);
void Save(DbTransaction transaction, Filter filter);
void Revert();
void Revert(Filter filter);
void Revert(DbTransaction transaction, Filter filter);
}
Filters
是在DataSets
中表达过滤表达式的复合结构。
基本上,这是一个三层DataAccess层:
业务对象必须使用Register
注册自己。使用Commit
向模型确认对这些对象的修改,并且可以使用CancelEdit
撤消对这些对象的修改。
可以使用Save
将提交的业务对象保存到基础保存结构(例如SQL Server),并且可以使用Save
撤消自上一个Revert
以来的所有更改。
此DataAccess图层可确保对已保存的和未保存的业务对象进行控制。它还允许单独的数据库和应用程序ID。
不幸的是,底层代码相当复杂......并且受版权保护:)
答案 2 :(得分:0)
叫我疯了,但我从不使用任何ORM工具包。原因是我是一个控制狂,并且手工编写所有数据访问允许我总是能够根据我的需要修改它,例如微调延迟加载功能等。
那么DA类中会发生什么。基本上,DA类包含这样的函数
void Save(DomainObject obj)
DomainObject Get(int id)
IEnumerable<DomainObject> Find(SomeQuery)
因此,进出我的数据访问类的是Domain对象。因此DA负责将域对象映射到其数据库表示。在我正在处理的项目中,客户端应用程序可以将Lambda表达式作为查询传递。所以我可以写这样的东西
IEnumerable<User> users = userDataAccess.Find(usr => usr.FirstName.StartsWith("Pete"));
我永远不会让它们变得静止。相反,我将在接口中定义功能,并让调用代码引用接口。这允许我使用Inversion of Control和Dependency Injection。有一个可测试应用程序的两个重要概念。
答案 3 :(得分:0)
在这个时代,大多数项目无法证明自己编写数据层是正确的。我强烈建议使用现有的解决方案。很抱歉答案不是答案。