我开始使用NHibernate而且我有点迷失了。我只是尝试用最小的代码来映射一个简单的表并查询它的所有成员。
我知道我应该开始使用xml映射,但是,我尝试使用属性映射(感觉比xml更流畅,更易于维护,感觉更清晰,更高效)
我的班级 - 映射名为&#34的表格;汽车"是这样的:
[Class(NameType = typeof(Cars),
Lazy = true,
Table = "Cars")]
public class Cars
{
[Property(Column = "Prefix")]
public virtual int Prefix { get; set; }
[Property(Column = "Status")]
public virtual int Status { get; set; }
[Property(Column = "Ip")]
public virtual string Ip { get; set; }
[Property(Column = "Port")]
public virtual int Port { get; set; }
[Property(Column = "CommStatus")]
public virtual int? CommStatus { get; set; }
[Property(Column = "TimeToRetry")]
public virtual DateTime? TimeToRetry { get; set; }
[Property(Column = "dsc")]
public virtual string dsc { get; set; }
[Property(Column = "Company")]
public virtual int Company { get; set; }
}
我的hibernate.cfg.xml配置文件是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">Server=.;Initial Catalog=TestDatabase;User Id=sa;Password=somethingelse!@#$;</property>
</session-factory>
</hibernate-configuration>
最后,我以最小的方式启动会话工厂和会话
[TestMethod]
public void ListAllData()
{
ISessionFactory sessionFactory;
Configuration dbConfig;
dbConfig = new Configuration();
dbConfig = dbConfig.Configure();
dbConfig.AddAssembly(typeof(Cars).Assembly);
sessionFactory = dbConfig.BuildSessionFactory();
using (ISession currentSession = sessionFactory.OpenSession())
{
var carList4 = currentSession.CreateCriteria(typeof(Cars)).List<Cars>();
var carList = currentSession.CreateCriteria<Cars>().List<Cars>();
var carList2 = currentSession.QueryOver<Cars>().List<Cars>();
var carList3 = currentSession.Query<Cars>().ToList<Cars>();
Assert.IsNotNull(carList);
Assert.IsTrue(carList.Count > 0);
}
}
然而,所有carList变量都是空列表 - 我不知道我可能做错了什么...... - 没有例外被抛出......我真的不知道出了什么问题(是的 - 数据库中有数据)
提前致谢!
答案 0 :(得分:1)
我终于得到了我做错的事。显然NHibernate 总是需要一个xml&#34;文件&#34;莫如何。
这就是为什么在初始化代码中我必须使用
dbConfig.AddInputStream(
HbmSerializer.Default.Serialize(
typeof(Cars).Assembly));
而不是
dbConfig.AddAssembly(typeof(Carros).Assembly);
Finnaly,我刚刚得知NHibernate中的每个班级都需要一个主键 - 这也是我为什么还要更改Cars类的原因
[Property(Name = "fHash")]
public virtual string fHash { get; set; }
成了
[NHibernate.Mapping.Attributes.Id(Name = "fHash")]
public virtual string fHash { get; set; }