您的数据访问类是什么样的?

时间:2009-08-28 14:58:35

标签: c# .net

您在数据访问类中添加了什么?源代码或类图很好。 成员是静态的吗? 你有什么辅助功能?

我不是要求一个comlete DA类。我可以建立那个。只是寻找一些建议/反馈。

4 个答案:

答案 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层:

  1. 业务对象(模型)
  2. 数据集
  3. 保存结构
  4. 业务对象必须使用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)

在这个时代,大多数项目无法证明自己编写数据层是正确的。我强烈建议使用现有的解决方案。很抱歉答案不是答案。