为什么使用LINQ的Fluent NHibernate返回空列表(使用Oracle数据库)?

为什么使用LINQ的Fluent NHibernate返回空列表(使用Oracle数据库)?,linq,oracle,nhibernate,fluent-nhibernate,Linq,Oracle,Nhibernate,Fluent Nhibernate,我正在使用Fluent NHibernate、NH3 build-694和LINQ连接到Oracle 11数据库。然而,我似乎无法从数据库中获取任何数据。连接似乎正在工作,因为如果我更改登录信息,它会抛出一个错误 我正在使用以下代码: // Setup. OracleClientConfiguration oracleClientConfiguration = OracleClientConfiguration.Oracle10 .ShowSql()

我正在使用Fluent NHibernate、NH3 build-694和LINQ连接到Oracle 11数据库。然而,我似乎无法从数据库中获取任何数据。连接似乎正在工作,因为如果我更改登录信息,它会抛出一个错误

我正在使用以下代码:

// Setup.

OracleClientConfiguration oracleClientConfiguration = 
    OracleClientConfiguration.Oracle10
        .ShowSql()
        .ConnectionString(connectionString);

_sessionFactory =
    Fluently.Configure()
        .Database(oracleClientConfiguration)
        .Mappings(m => m.FluentMappings
            .AddFromAssemblyOf<Feed>())
        .BuildSessionFactory();

// Query.

using (ISession session = _sessionFactory.OpenSession())
{
    IEnumerable<Category> categories = session.Query<Category>().ToList(); // Returns empty list.

    // And so on...
}
我有一个分类表的映射,但是,不管我在那里放了什么,我仍然会得到一个空列表。此外,即使我使用ShowSql,在VS2010窗口中也没有看到任何NHibernate输出

我正在使用TestDriven.NET3.x来运行代码。不会引发任何错误,并且返回集合上的Assert.NotEmpty xUnit显然会失败

我被卡住了,因为代码正在运行,什么也没有返回,我无法获得任何诊断信息。我甚至试着让NHibernate写信给log4net TraceAppender,但是,同样,什么也没有


如果有任何提示,我将不胜感激,即使这是让事情告诉我它试图做什么的一种方式。

你能试着用这个替换代码的下半部分吗

using (ISession session = _sessionFactory.OpenSession())
{
    IEnumerable<Category> categories = session.CreateCriteria(typeof(Category)).List<Category>();
}

乍一看,我怀疑问题在于您使用的是ToList而不是List,但请告诉我这一建议是否解决了眼前的问题。

您能尝试用它替换代码的下半部分吗

using (ISession session = _sessionFactory.OpenSession())
{
    IEnumerable<Category> categories = session.CreateCriteria(typeof(Category)).List<Category>();
}

乍一看,我怀疑问题在于您使用了ToList而不是List,但是,如果这个建议让您解决了眼前的问题,请告诉我。

发现映射中使用的一个类被标记为内部。

发现映射中使用的一个类被标记为内部。

检查Fluent NHibernate xml文件。我面临着同样的问题,毕竟我意识到我的xml文件已经过时。

检查流畅的NHibernate xml文件。我面临着同样的问题,毕竟我意识到我的xml文件已经过时。

恐怕这没有什么区别。我使用ToList强制LINQ表达式求值,因为如果立即求值,调试起来会更容易。恐怕这没有什么区别。我使用ToList强制LINQ表达式求值,因为如果立即求值,调试起来会更容易。