nhibernate中的备用数据库模式查询

时间:2010-02-22 14:43:10

标签: .net nhibernate ado.net

我正在使用asp.net业务应用程序并使用nhibernate。我使用nhibernate的目的是最小化/避免不同数据库(Oracle,SQL Server,Postgres等)上的应用程序移植工作。

我有一个场景,我必须动态检查数据库表模式并在其上构建一些功能。我想到的第一件事就是创建存储过程并将其移植到不同的数据库中。我的存储过程看起来像这样......


SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = (
    SELECT MasterTableName FROM SystemDocument WHERE DocId = @vDocumentID
)

现在我有2个问题......

1- NHibernate中是否有任何替代方法可以通过避免存储过程来实现这一目标?

2-如果第一个问题的回答是NO :(那我怎么能填写一个dto / POCO,它可以包含列和它们的表类型而不用nhibernate映射?

我将非常感谢你对此提出的建议。

谢谢, 阿西

2 个答案:

答案 0 :(得分:0)

您可以使用常规sql并将其投影到dto对象上。我使用命名查询,因此更容易更改。我不知道是否有办法根据当前使用的方言自动映射这些命名查询。

答案 1 :(得分:0)

在C#中,您可以使用以下代码在Startup.cs文件中实现此目的:

// Append database schema for update
 schemaHelper.AppendDatabaseUpdateSql(Assembly.GetExecutingAssembly(), sessionFactoryHelper.GetConfiguration(hibernateCfgPath));

// Append database schema for creation
schemaHelper.AppendDatabaseCreationSql(Assembly.GetExecutingAssembly(), sessionFactoryHelper.GetConfiguration(hibernateCfgPath));

这些会从您的映射中创建正确的数据库表。

否则请参阅this post了解其他解决方案。

希望有所帮助: - )