【问题标题】:Using LINQ with NHibernate将 LINQ 与 NHibernate 一起使用
【发布时间】:2011-01-07 00:21:23
【问题描述】:

好的,我想我已经完成了所有配置,现在我只是尝试从数据库中选择一些数据进行选择查询。现在我正在使用 NHibernate 3.0,尽管默认情况下我支持 LINQ(或者至少是链接的很大一部分。现在我找到的每个 LINQ 示例都有这个代码

session.Linq<User>()

但我终其一生都找不到会话的设置方式或位置。这是在 3.0 中执行的正确原因吗?如果是,我该如何设置会话(我需要什么用途、类、方法等……)?如果不是,那么在 NHibernate 3.0 中使用 LINQ 的正确方法是什么?

更新:

现在我有以下代码:

var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Tag).Assembly);
var sessionFactory = configuration.BuildSessionFactory();
var session = sessionFactory.GetCurrentSession();

但是我得到一个编译器错误,说 NHibernate.ISession 没有 Linq 的定义。我有以下用途:

using System.Collections.Generic;
using System.Web.Mvc;
using MyProject.Models;
using MyProject.ViewModels.Desktop;
using NHibernate.Cfg;

我错过了什么吗?

【问题讨论】:

  • 我相信它是 NHibernate 3 中的 session.Query&lt;User&gt;(),因为 LINQ 提供程序已被引入核心程序集
  • NHibernate wiki 是一个很好的入门资源 - nhforge.org/wikis/howtonh/…

标签: c# linq nhibernate


【解决方案1】:

你需要导入命名空间:

using NHibernate.Linq;

还有,现在是:

session.Query<TEntity>();

代替:

// Deprecated
session.Linq<TEntity>();

【讨论】:

  • 是的,我确实发现我需要为 NHibernate 3 使用 .Query 而不是 .Linq,谢谢
【解决方案2】:

您从 NHibernate SessionFactory.CreateSession() 方法获得一个会话。一旦有了,您就可以使用 HQL 查询、NH 查询 API 或 LINQ 来访问数据。

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多