我正在开发一个 WCF 项目,该项目从多个数据源中提供业务信息。为了重用代码,我的 BusinessContactService 包含一个通用存储库依赖项,定义为:
public interface IRepository<T> {
IQueryable<T> Find(Expression<Func<T, bool>> criteria);
}
服务通过存储库查询数据源:
repo.Find(b => b.Name.Contains("abc"));
当数据源是 sql server 数据库时,它通过 Entity Framework 工作。但是当服务在 Ingres 数据库上运行时,就会出现问题,因为它的 .NET 数据提供程序或 ODBC 驱动程序不能与 LINQ 表达式一起使用。以下是我发现的一些解决方法:
- EF 的Virtuoso 数据提供者:因为它不是免费的,而且系统团队也不想安装它,所以我不能使用它。
- 自定义 Ingres EF 提供程序,如实体框架示例提供程序所示。这很有趣,但我恐怕不会做出时间表(下周!)
- 通过使用规范模式在我的服务中隐藏 LINQ 表达式的使用。因此在 sql server 规范实现中仍然使用 LINQ,而在 Ingres 案例中使用 ado.net。
- NHibernate.Linq。我对 NHibernate 知之甚少,但这里有人说它与 ODBC 一起工作得很好,我猜它可能能够将 LINQ 表达式与 Ingres 连接起来。
请就选项 2 - 4 提出建议。非常感谢!