1

我是 NHibernate 的新手,如果这是一个简单的问题,我深表歉意。基本上,我有一个包含对其他数据库的访问的数据库。这是我的基础数据库的布局。这是一个包含其他数据库的数据库信息的表

--Databases--
Id
DatabaseName
DatabaseType
ConnectionString

如您所见,此表包含维护的所有数据库。现在这是一个表,其中包含链接到数据库的所有列。

--Tables--
Id
Name
ColumnNames
DatabaseId

我有许多不同类型的数据库,包括(Oracle、mysql、mssql 或 postgresql)。它们在我的应用程序中都扮演着不同的角色。为每个数据库中的每个表创建映射 xml 文件将非常耗时。

我想传递 nhibernate 连接字符串并对表执行一个简单的查询。这是一个查询示例。

select * from table90182763 where id IS not NULL and id <> 0

我可以将此 SQL 查询直接传递给 NHibernate 吗?我可以在每个请求上有效地将连接字符串传递给休眠吗?

4

1 回答 1

2

您可以使用 session.CreateSQLQuery(),但它在您的场景中有一个缺点。

为了使用 CreateSQLQuery,您需要已经为每个数据库、映射文件和类从结果构建域实体的会话管理器等...

NHibernate 映射到实体,因此如果您想编写原始 SQL 并返回结果数据表,只需使用标准 ODBC 驱动程序并以旧方式执行操作。

NHibernate 使开发和维护变得更快、更容易,如果您将来想要快速维护和添加新功能,应该正确使用它。

正如强大的 Craig Quillen 所说,“如果它是合法的基础设施,并且可以为您节省时间和不眠之夜,那么它就是一个很好的投资回报率”。

您可以设置 NHibernate 以访问任意数量的数据库,使用任意数量的数据库引擎类型。您还可以使用 IoC 容器抽象您的数据库会话,使其几乎透明。

您应该使用代码配置(此处的示例)来创建多个会话工厂,每个会话工厂都有自己的 ConnectionString、方言和驱动程序。这些将被创建为静态或“按需 IoC”单例。然后根据您需要加载的实体,您的 IoC 工厂可以从正确的 NHibernate 会话工厂请求会话。

In order to generate mapping files and entities in an automated fashion directly from the database tables, use a tool similar to : http://nmg.codeplex.com/

于 2012-09-25T19:51:02.627 回答