例外是:
无法编译映射文档:WindowsFormsApplication2.Products.hbm.xml
,内部例外是:
持久化类Sample.CustomerService.Domain.Products,Sample.CustomerService。找不到域名
我的配置是:
用于映射的类是
$('[data-toggle="popover"]').popover('hide')
和会话工厂
namespace Sample.CustomerService.Domain
{
public class Product
{
public virtual int Productid { get; set; }
public virtual string Name { get; set; }
}
}
当我尝试通过此代码获取记录时
public sealed class SessionFactory
{
private static volatile ISessionFactory iSessionFactory;
private static object syncRoot = new object();
public static ISession OpenSession
{
get
{
if (iSessionFactory == null)
{
lock (syncRoot)
{
if (iSessionFactory == null)
{
Configuration configuration = new Configuration();
configuration.AddAssembly(Assembly.GetCallingAssembly());
iSessionFactory = configuration.BuildSessionFactory();
}
}
}
return iSessionFactory.OpenSession();
}
}
}
它给我错误无法编译映射文档,如上所述。 我是hibernate的新手,我在visual studio 2012中通过manage nugget pcakage选项从nugget.org添加了hibernte,它添加了两个dhhibernate和Iesi.collections。请帮我解决这个错误,我提供了所有信息。
答案 0 :(得分:2)
在您的映射中,您拥有产品,并且您的类名为Product(以单数形式)。所以它应该是:
<class name="Product" table="Products" lazy="true">
BTW,lazy是nhibernate的默认值,因此您可以在映射中省略它。此外,如果表名与表名相同,您也可以省略它,最好将映射文件内容保持在最小值。
答案 1 :(得分:0)
我们需要的是这样的映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Sample.CustomerService.Domain"
assembly="Sample.CustomerService.Domain"> // expecting same as namespace hre
// as the xml sais: class name (C# class name) is Product, not Products
<class name="Product" table="Products" lazy="true" batch-size="25" >
// I would also from the beginning suggest to use batch-size="25"
// name must be equal to C# name, including case sensitivity
<id name="Productid" column="Product_ID" class="native" />
// property could be expressed without the column,
// if C# name and column name are the same
<property not-null="false" name="Name" />
</class>
</hibernate-mapping>
注意:在此处查看有关批量提取的更多信息(batch-size="25" details)
现在,如果想要查询它 - 使用HQL,我们应该知道,HQL是建立在我们的C#对象之上的。我们必须使用他们的确切名称:
Chapter 14. HQL: The Hibernate Query Language
NHibernate配备了一种非常强大的查询语言(非常有意)看起来非常像SQL。但不要被语法所欺骗; HQL完全面向对象,理解继承,多态和关联等概念。
<强> 14.1。案例敏感性
查询不区分大小写,但.NET类和属性的名称除外。因此SeLeCT与sELEct与SELECT相同,但Eg.FOO不是Eg.Foo,而foo.barSet不是foo.BARSET。
而且(我会追加)单数与复数必须相符。因为我们有:
public class Product
{
...
我们必须像这样查询(很惊讶你能够构建它,因为Products
不在代码中,只有Product
)。
using (ISession session = SessionFactory.OpenSession)
{
//IQuery query = session.CreateQuery("FROM Products");
var query = session.CreateQuery("FROM Product"); // just Product
// here again
//IList<Products> pInfos = query.List<Products>();
IList<Product> pInfos = query.List<Product>();
...