2010-07-21 77 views
2

是否有人知道如何使用标准查询的结果从休眠模式创建视图?使用NHibernate创建数据库视图

我们的应用程序中有一些遗留部分使用应用程序生成的视图进行数据检索,我喜欢将新的NHibernate素材绑定到那些最小的摩擦之中。

我把它变成一个扩展方法,所以我可以做最终的东西是这样的:

session.CreateCriteria<Thing>().CreateReportView().List(); 

任何想法?

现有的过程是这样的:

SQLString = _bstr_t("SELECT name FROM User WHERE Retired = false"); 

...run the query process the results, then... 

SQLStringView = _bstr_t(" \ 
    BEGIN EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW ") + ViewName + _bstr_t(" AS ") + SQLString; 

所以每当我们运行此查询,我们得到的是在它具有相同的数据的视图。我不能解决如何复制这是休眠,但。

+0

视图已经存在于您的数据库中?或者你的应用程序在飞行中创建它们? – mxmissile 2010-07-21 17:58:09

+0

该应用程序当前使用ADO快速创建它们。我们正在将所有的东西都移到使用NHibernate,但需要保留旧的东西的意见。所以我们需要在查询执行时创建它。 – 2010-07-21 18:15:30

+0

@Matt Sharpe:我不确定我完全理解;你能发表一些示例代码来解释你的“只有苍蝇”观点现在如何工作吗? – DanP 2010-07-21 18:23:25

回答

0

如果您只想过滤返回的数据,您可能需要查看Nhibernate的过滤机制; here is a good article概述了它们的用法。

+0

感谢此,但过滤器是用户创建的自定义过滤器,涵盖整个域模型,并包含诸如Plan.Owner = {user}之类的内容。这一切都建立在一个hibernate标准查询中,但要维护我需要生成这个视图的应用程序的其他部分。该视图被使用,因此技术栈的其他部分(如SSRS和COM)不必解析已保存的过滤器并自行运行SQL。 – 2010-07-21 19:46:50

2

查看this article了解实体类到视图和表的映射的解释。我不确定您能够按照您的指定在运行时动态创建视图;但也许这可以作为使用数据库对象映射的模式生成过程的一部分来完成?

1

要直接使用NHibernate创建视图,请查看'数据库对象'映射元素。

Ayende有一个很好的例子here

相关问题