在 C# 中将 nhibernate 连接到 Postgresql
Connecting nhibernate to Postgresql in C#
这是我第一次使用 nhibernate,在连接 Postgresql 数据库和从中检索数据时遇到了问题。该代码没有给出错误,但 returns 也没有值。当我使用 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();
这里的要点(我可以看到)传递给查询的类型错误:
var completeList = session.CreateCriteria<Object>().List();
正如我们所见,我们要求 Object
(传递为 <TEntity>
) 这是 C# 内置类型,几乎可以肯定 NHibernate 映射未映射...
注意:NHibernate 不太好的一面是 - 当查询未映射的对象时 - 我们得到空结果而不是错误
所以,试着请求一些真正映射的对象:
var completeList = session.CreateCriteria<Employee>().List();
我已通过将映射更改为使用流畅的映射来解决此问题,一切突然都正常了
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ReportDB>())
这是我第一次使用 nhibernate,在连接 Postgresql 数据库和从中检索数据时遇到了问题。该代码没有给出错误,但 returns 也没有值。当我使用 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();
这里的要点(我可以看到)传递给查询的类型错误:
var completeList = session.CreateCriteria<Object>().List();
正如我们所见,我们要求 Object
(传递为 <TEntity>
) 这是 C# 内置类型,几乎可以肯定 NHibernate 映射未映射...
注意:NHibernate 不太好的一面是 - 当查询未映射的对象时 - 我们得到空结果而不是错误
所以,试着请求一些真正映射的对象:
var completeList = session.CreateCriteria<Employee>().List();
我已通过将映射更改为使用流畅的映射来解决此问题,一切突然都正常了
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ReportDB>())