2011-05-09 105 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