使用LINQ表达式或规范模式访问Ingres数据库?
我正在从事一个WCF项目,该项目从多个数据源中提供业务信息。要重用代码,my BusinessContactService包含一个通用存储库依赖项,定义如下:使用LINQ表达式或规范模式访问Ingres数据库?,linq,specifications,ingres,Linq,Specifications,Ingres,我正在从事一个WCF项目,该项目从多个数据源中提供业务信息。要重用代码,my BusinessContactService包含一个通用存储库依赖项,定义如下: public interface IRepository<T> { IQueryable<T> Find(Expression<Func<T, bool>> criteria); } 当数据源是sql server数据库时,它通过实体框架工作。但是,当服务在Ingres数据库上运行
public interface IRepository<T> {
IQueryable<T> Find(Expression<Func<T, bool>> criteria);
}
当数据源是sql server数据库时,它通过实体框架工作。但是,当服务在Ingres数据库上运行时,会出现问题,因为它的.NET数据提供程序或ODBC驱动程序不适用于LINQ表达式。以下是我发现的一些变通方法:
请就方案2-4提出建议。非常感谢 首先,一点建议。对于您的通用接口,我认为最好公开:
IQueryable<T> Query<T>();
IQueryable查询();
因此,应用层将能够调用它并链接它想要的任何内容,如:
var temp = repo.Query<User>().Where(c => c.Email.Contains("@foo.com")).OrderBy(c => c.FirstName);
var temp=repo.Query().Where(c=>c.Email.Contains(@foo.com)).OrderBy(c=>c.FirstName);
对于你的问题,我发现,当没有EF提供者时——或者你出于任何原因不能使用它时——NHibernate和流利的NHibernate是完全可以选择的。虽然不如EF(显然是代码优先)强大,但仍然是一个很好的后备方案。它支持最常见的linq操作符,它将非常适合您的抽象设计。首先,有一点建议。对于您的通用接口,我认为最好公开:
IQueryable<T> Query<T>();
IQueryable查询();
因此,应用层将能够调用它并链接它想要的任何内容,如:
var temp = repo.Query<User>().Where(c => c.Email.Contains("@foo.com")).OrderBy(c => c.FirstName);
var temp=repo.Query().Where(c=>c.Email.Contains(@foo.com)).OrderBy(c=>c.FirstName);
对于你的问题,我发现,当没有EF提供者时——或者你出于任何原因不能使用它时——NHibernate和流利的NHibernate是完全可以选择的。虽然不如EF(显然是代码优先)强大,但仍然是一个很好的后备方案。它支持最常见的linq运算符,非常适合您的抽象设计。谢谢,Matteo。我喜欢Query()方法。泛型方法而不是类,不是吗?我会试试NHibernate,是的。您的存储库界面不应该是通用的。您可以在一个类中实现它,然后通过查询可以访问所有类型。谢谢,Matteo。我喜欢Query()方法。泛型方法而不是类,不是吗?我会试试NHibernate,是的。您的存储库界面不应该是通用的。您可以在一个类中实现它,然后通过查询可以访问所有类型。