linq查询的问题
Posted
技术标签:
【中文标题】linq查询的问题【英文标题】:Problem with linq query 【发布时间】:2011-08-21 21:20:26 【问题描述】:我正在尝试将 linq 用于 NHibernate(使用 Fluent NHibernate),但我遇到了 linq 查询问题。每次我尝试执行它时,我都会收到此消息:
"方法'get_IsReadOnlyInitialized' 在类型 'NHibernate.Linq.Util.DetachedCriteriaAdapter' 从程序集'NHibernate.Linq, 版本=1.1.0.1001,文化=中性, PublicKeyToken=null' 没有 实施。"
有人知道如何解决这个问题吗?我尝试使用带有模型上下文的解决方案表单this page,但它没有帮助。
这是代码:
using(var session = NHibernateHelper.OpenSession())
var informations = (from i in session<Information>() where i.Text=="some text" select i).ToList();
如果我不使用 where 部分,一切都很好,但如果我使用它,我会收到此错误。我认为问题出在 NHibernate.Linq.dll
【问题讨论】:
发布给您带来麻烦的代码总是一个好主意。你能做到吗? 这是使用 Nhibernate 2 和 NHibernate.Linq 项目吗?您是否尝试过在 Nhibernate 3 中进行相同的测试,如果我没记错的话应该内置 Linq 支持。 不,我有 NHibernate 3.1.0.4000、FluentNHibernate 1.2.0.712 和 NHibernate.Linq 1.0。它不是内置的。我必须独立添加它。 我明白了。这是集成在现有解决方案还是新项目中?您是否尝试过使用本机 Nhibernate ICriteria 重现相同的查询?如果这没有帮助,那么您能否发布相关映射,或者更好的是,发布一个包含代码和数据库架构的完整测试项目? 【参考方案1】:您应该不将 NHibernate.Linq.dll 与 NHibernate 3.0 一起使用! NHibernate 3.0 包含了 Linq(比旧的扩展 dll 好得多的版本),您只需要添加 using NHibernate.Linq;
并使用 session.Query<T>()
而不是 session.Linq<T>()
。
【讨论】:
你用什么代替QueryOptions
和NHibernateQueryProvider
?【参考方案2】:
据我所知,您不是在比较,而是在分配文本。
不应该是 == 而不是 =:
using(var session = NHibernateHelper.OpenSession())
var informations = (from i in session<Information>() where i.Text=="some text" select i).ToList();
【讨论】:
以上是关于linq查询的问题的主要内容,如果未能解决你的问题,请参考以下文章