C# 自动数据访问层

C# 自动数据访问层,c#,.net,data-access,C#,.net,Data Access,从根本上说,我讨厌编写数据访问层。我认为这是一项无聊而毫无意义的努力。我设想了一个开发环境,在那里我可以创建实体/模型并开始构建应用程序。编写DAL、过程等所需的时间。。。这会削弱我对项目的热情 我想要的是我的数据的通用存储库接口。比如: public interface IRepository { //Get individual TEntity item by id TEntity GetItem<TIdentifier, TEntity>(TIdentifier

从根本上说,我讨厌编写数据访问层。我认为这是一项无聊而毫无意义的努力。我设想了一个开发环境,在那里我可以创建实体/模型并开始构建应用程序。编写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...
}
公共接口IRepository
{
//按id获取单个TEntity项
TEntity GetItem(TIdentifier id);
//通过表达式获取单个tenty项
TEntity GetItem(表达式);
//通过表达式获取单个tenty项
TEntity GetItem(表达式);
//拿到所有的物品
IList GetList();
//获取所有TEntity项,按表达式筛选
IList GetList(表达式);
//获取所有TEntity项,按表达式筛选
IList GetList(表达式);
TIdentifier CreateItem。。。
bool-UpdateItem。。。
布尔删除项。。。
}
我特别感兴趣的东西,将工作

  • Azure数据服务
  • SQL Server
  • sqLite
…但该理论适用于任何数据存储库

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


注意:我知道ORM,我想要的东西可以消除编写DAL或存储过程的要求。

看看NHibernate、Castle ActiveRecord、亚音速、LinqToSql


你说你知道ORM,但它们几乎完全符合你的问题要求,至少在可能的范围内。

我知道你说你知道ORM,不想要它们,但是你能处理一些你编写的数据访问方法是用
LINQ
编写的吗

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


编辑:如果您想使用Azure,请查看此链接:

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

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


更多信息请参见:

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

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


查看这个非常完整的文件。

我是否还需要为所有实体编写进程?不,您不需要编写存储的进程,您可以编写LINQ语句。因此,您的所有代码都是C语言的。如果您的编程信条是编写存储的过程,那么是的,您必须编写它们。我成功地实现了Web表单模型,使用LinqToSql作为我的ORM,没有存储过程。是的,Linq to SQL符合要求,但仅适用于SQL Server。是否有Linq到Azure?您可以使用ADO.NET数据服务连接到Azure并针对其编写Linq查询。@MC2谢谢,我不知道。