2011-05-09 262 views
30

我想使用LINQ到NHibernate(与流利NHibernate),但我有linq查询问题。每次我试图执行它,我得到这个消息:LINQ查询问题

法 'get_IsReadOnlyInitialized' 型 'NHibernate.Linq.Util.DetachedCriteriaAdapter' 从程序集“NHibernate.Linq, 版本= 1.1.0.1001文化=中性, 公钥=空”不具有 实现。

有谁知道如何解决这个问题?我用解决方案表单this page与模型上下文一起尝试,但它没有帮助。

这是代码:

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

一切都很好,如果我不使用其中一部分,但如果我使用它,我得到这个错误。我认为问题出在NHibernate.Linq.dll

+0

发布给您带来麻烦的代码总是一个好主意。你能做到吗? – csano 2011-05-09 19:35:39

+0

这是使用Nhibernate 2和NHibernate.Linq项目吗? 您是否尝试过在Nhibernate 3中测试相同,如果我没有记错Linq支持应该内置。 – Tomas 2011-05-10 10:35:13

+0

不,我有NHibernate 3.1.0.4000,FluentNHibernate 1.2.0.712和NHibernate.Linq 1.0。它不是内置的,我必须单独添加它。 – Athina 2011-05-10 10:48:53

回答

54

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

+1

非常感谢! :) – Athina 2011-05-11 16:51:49

+0

救了我的一天!非常感谢 ! – 2011-11-23 13:30:36

+1

你用什么来代替'QueryOptions'和'NHibernateQueryProvider'? – Maslow 2012-11-27 15:21:25

0

据我可以看到你没有比较,但分配文本。

如果它不在=代替被==:

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

我在代码中有==。我通过编写代码犯了一个错误。 – Athina 2011-05-10 08:41:39