自动数据访问层

时间:2009-08-13 13:44:04

标签: c# .net data-access

我从根本上厌倦了编写数据访问层。我认为这是一种无聊而毫无意义的努力。我设想了一个开发环境,我可以在其中创建我的实体/模型并开始构建应用程序。写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 Server
  • SQLITE

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

有没有人遇到过现成的解决方案,或者我必须通过编写更多的数据访问层来解决问题,而不是我想要握手。

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

5 个答案:

答案 0 :(得分:3)

看看NHibernate,Castle ActiveRecord,SubSonic,LinqToSql,......

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

答案 1 :(得分: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

答案 2 :(得分:2)

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

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

查看完整的ORMs list

答案 3 :(得分:1)

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

此处提供更多信息:http://msdn.microsoft.com/en-us/library/bb386964.aspx

答案 4 :(得分:0)

使用LINQ,这实际上可以为您完成所有数据访问任务...