【问题标题】:Automatic Data Access Layer自动数据访问层
【发布时间】:2010-11-19 07:31:08
【问题描述】:

我基本上厌倦了编写数据访问层。我认为这是一种无聊且毫无意义的努力。我设想了一个开发环境,我可以在其中创建我的实体/模型并开始构建应用程序。编写 DAL、程序等所花费的时间……简直吞噬了我对一个项目的热情。

我想要的是我的数据的通用存储库接口。比如:

public interface IRepository
{
    //Get individual TEntity item by id
    TEntity GetItem<TIdentifier, TEntity>(TIdentifier id);

    //Get individual TEntity item by the expression
    TEntity GetItem<TIdentifier, TEntity, TArg>(Expression<Func<TArg, TEntity>> expression);

    //Get individual TEntity item by the expression
    TEntity GetItem<TIdentifier, TEntity, TArg1, TArg2>(Expression<Func<TArg1, TArg2, TEntity>> expression);

    //Get all TEntity items
    IList<TEntity> GetList<TEntity>();

    //Get all TEntity items,  filtered by the expression
    IList<TEntity> GetList<TEntity, TArg>(Expression<Func<TArg, IList<TEntity>>> expression);

    //Get all TEntity items,  filtered by the expression
    IList<TEntity> GetList<TEntity, TArg1, TArg2>(Expression<Func<TArg1, TArg2, IList<TEntity>>> expression);

    TIdentifier CreateItem...

    bool UpdateItem...

    bool DeleteItem...
}

我对适合的东西特别感兴趣

  • Azure 数据服务
  • SQL 服务器
  • sqlite

...但该理论适用于任何数据存储库

是否有人遇到过现成的解决方案,或者我是否必须通过编写比我想动摇的更多的数据访问层来解决问题。

注意:我知道 ORM,我想要一些不需要编写任何 DAL 或存储过程的东西。

【问题讨论】:

    标签: c# .net data-access


    【解决方案1】:

    看看 NHibernate、Castle ActiveRecord、SubSonic、LinqToSql、...

    您说您了解 ORM,但它们几乎完全符合您的问题,至少在可能的范围内。

    【讨论】:

    • 难道我还不需要为我所有的实体写 procs 吗?
    • 不,您不必编写存储过程,您可以编写 LINQ 语句。那么你所有的代码都在 C# 中。
    • 如果您的编程教条是编写存储过程,那么是的,您将不得不编写它们。我使用 LinqToSql 作为我的 ORM 成功实现了 Web 窗体模型,没有存储过程。
    【解决方案2】:

    我知道你说过你知道 ORM 并且不想要它们,但是你能处理一下你写的数据访问方法写在 LINQ 中的东西吗?

    我发现我更喜欢写LINQ 语句而不是SQL 语句。如果您对此持开放态度,我会查看实体框架、LINQ to SQL、NHibernate 等。

    编辑:如果您想使用 Azure,请查看此链接:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/74a0a57e-d979-48ed-b534-f449bac0f90d

    【讨论】:

    • 是的,Linq to SQL 符合要求,但仅适用于 SQL Server。是否有 Linq To Azure?
    • 您可以使用 ADO.NET 数据服务连接到 Azure 并针对它编写 LINQ 查询。
    • @mc2thaH 谢谢,我不知道。
    【解决方案3】:

    这是Salamanca 的目标之一。虽然它仍处于早期阶段,但我们可以使用一两个编码手......

    如果您想要现有的解决方案,我建议您深入研究可能与代码生成工具相关的 ORM(如其他建议):

    看看这个非常完整的ORMs list

    【讨论】:

      【解决方案4】:

      LINQ to Entities 和 .Net 的 Entities 框架是两个最佳的跨服务器解决方案。

      更多信息在这里:http://msdn.microsoft.com/en-us/library/bb386964.aspx

      【讨论】:

        【解决方案5】:

        使用 LINQ,它几乎可以为您完成所有数据访问任务...

        【讨论】:

          猜你喜欢
          • 2012-02-10
          • 2012-02-09
          • 1970-01-01
          • 2011-10-20
          • 2011-02-16
          • 2011-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多