Linq查询存在问题

30

我正在尝试使用linq to NHibernate(与Fluent NHibernate一起) ,但是在linq查询方面遇到了问题。每次尝试执行它时,都会出现此消息:

"来自程序集'NHibernate.Linq,Version=1.1.0.1001,Culture=neutral,PublicKeyToken=null'中类型'NHibernate.Linq.Util.DetachedCriteriaAdapter'的方法'get_IsReadOnlyInitialized'没有实现。"

有人知道如何解决这个问题吗?我尝试了这个页面上的解决方案,但没有帮助。

这是代码:

using(var session = NHibernateHelper.OpenSession())   
{   
var informations = (from i in  session<Information>() where i.Text=="some text" select  i).ToList();   
}

如果我不使用where部分,一切都很好,但是如果我使用它,就会出现这个错误。我认为问题在于NHibernate.Linq.dll文件。


你遇到问题时,将出现问题的代码贴出来通常是个好主意。你能做到吗? - csano
这是否使用了 Nhibernate 2 和 NHibernate.Linq 项目? 如果我没记错的话,您是否尝试在 Nhibernate 3 中进行相同的测试?Linq 支持应该已经内置。 - Tomas
不,我有NHibernate 3.1.0.4000、FluentNHibernate 1.2.0.712和NHibernate.Linq 1.0。它们不是内置的,我必须独立添加它们。 - Athina
我明白了。 这是集成在现有解决方案中还是一个新项目?您是否尝试使用本地的Nhibernate ICriteria来重现相同的查询? 如果这没有帮助,那么您可以发布相关的映射,甚至更好的是,提供完整的测试项目包括代码和数据库模式。 - Tomas
2个回答

54

不应该使用 NHibernate 3.0中的 NHibernate.Linq.dll!NHibernate 3.0包含Linq(比旧扩展DLL更好的版本),你只需要添加 using NHibernate.Linq; 并使用 session.Query<T>() 而不是 session.Linq<T>()


1
你可以使用什么代替 QueryOptionsNHibernateQueryProvider - Maslow

0

就我所看到的,你并没有进行比较,而是在赋值文本。

难道不应该使用 == 而不是 = 吗:

using(var session = NHibernateHelper.OpenSession()) {
var informations = (from i in session<Information>() where i.Text=="some text" select i).ToList();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接