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

时间:2011-02-18 19:27:22

标签: linq oracle nhibernate fluent-nhibernate

我正在使用Fluent NHibernate(NH3构建 - #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(),我也没有在VS(2010)窗口中看到任何NHibernate输出。

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

我卡住了,因为代码正在运行而且什么都没有返回,我无法获得任何诊断信息。我甚至尝试让NHibernate写入log4net(TraceAppender),但是,再一次,没有。

我会感激任何指点 - 即使这是一种让我告诉我它想要做什么的方法。

3 个答案:

答案 0 :(得分:3)

事实证明,映射中使用的其中一个类标记为“内部”。

答案 1 :(得分:1)

您可以尝试用此替换代码的下部块吗?

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

乍一看,我怀疑问题是您使用的是ToList()而不是List<T>(),但请告诉我这个建议是否能让您解决这个问题。

答案 2 :(得分:1)

检查Fluent NHibernate xml文件。我遇到了同样的问题,毕竟我发现我的xml文件已经过时了。