3

这是我第一次使用 nhibernate,我在连接和检索 Postgresql 数据库中的数据时遇到了问题。该代码没有给出错误,但也没有返回任何值。当我使用 pgAdmin3 时,我确实得到了数据。

AutoPersistenceModel model = AutoMap.Assembly(System.Reflection.Assembly.GetCallingAssembly())
    .Where(t => t.Namespace == "POCPostgresql.Model");

var configuration = Fluently.Configure()
    .Database(PostgreSQLConfiguration.Standard
    .ConnectionString(c => c
        .Host("server")
        .Port(5432)
        .Database("database")
        .Username("username")
        .Password("password")))
    .Mappings(m => m
        .AutoMappings.Add(model))
    .ExposeConfiguration(config => new SchemaExport(config).Create(false, true))
    .BuildSessionFactory();

    using (var session = configuration.OpenSession())
    {
        // Query all objects
        var completeList = session.CreateCriteria<Object>().List();

        Console.ReadLine();
    }

completelist 变量是一个空列表。

有什么我忘记了吗?

编辑:此外,当将配置移动到 app.config 并以不同方式初始化它时,会导致一个空列表

Configuration configuration = new Configuration();
configuration.Configure();
ApplicationCore.Instance.SessionFactory = configuration.BuildSessionFactory();

using (var session = ApplicationCore.Instance.SessionFactory.OpenSession())
{
    var completeList = session.CreateCriteria<Object>().List();

    Console.ReadLine();
}

编辑 2:我想也许是服务器出于某种原因拒绝了我的查询,但我尝试只使用 npgsql 进行查询,这工作正常。

NpgsqlConnection conn = new NpgsqlConnection("server=server;Port=5432;Database=database;User Id=username;Password=password;");
conn.Open();
string sql = "SELECT * FROM report LIMIT 100";

NpgsqlCommand command = new NpgsqlCommand(sql, conn);

NpgsqlDataReader dr = command.ExecuteReader();

while (dr.Read())
    Console.Write("{0}\t{1} \n", dr[0], dr[1]);

conn.Close();

Console.ReadLine();
4

2 回答 2

2

我已经通过更改映射以使用流畅的映射解决了这个问题,一切都突然起作用了

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ReportDB>())
于 2015-09-17T13:38:24.000 回答
0

这里的要点(我可以看到)是传递给查询的错误类型:

var completeList = session.CreateCriteria<Object>().List();

正如我们所看到的,我们要求(passed as )这是 C# 内置类型,几乎可以肯定 NHibernate 映射不是 MAPPED ...Object <TEntity>

注意:NHibernate 不太好的方面是 - 当查询未映射的对象时 - 我们得到空结果而不是错误

所以,试着询问一些真正映射的对象:

var completeList = session.CreateCriteria<Employee>().List();
于 2015-09-03T10:16:33.423 回答