【问题标题】:Problem with linq querylinq查询的问题
【发布时间】: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 重现相同的查询?如果这没有帮助,那么您能否发布相关映射,或者更好的是,发布一个包含代码和数据库架构的完整测试项目?

标签: linq nhibernate fluent-nhibernate linq-to-nhibernate


【解决方案1】:

您应该不将 NHibernate.Linq.dll 与 NHibernate 3.0 一起使用! NHibernate 3.0 包含了 Linq(比旧的扩展 dll 好得多的版本),您只需要添加 using NHibernate.Linq; 并使用 session.Query&lt;T&gt;() 而不是 session.Linq&lt;T&gt;()。

【讨论】:

  • 你用什么代替QueryOptions和NHibernateQueryProvider?
【解决方案2】:

据我所知,您不是在比较,而是在分配文本。

不应该是 == 而不是 =:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多