Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在NHibernate中编译映射文档_C#_Winforms_Nhibernate - Fatal编程技术网

C# 无法在NHibernate中编译映射文档

C# 无法在NHibernate中编译映射文档,c#,winforms,nhibernate,C#,Winforms,Nhibernate,例外情况是: 无法编译映射文档:WindowsFormsApplication2.Products.hbm.xml 内部的例外是: 持久类Sample.CustomerService.Domain.Products,Sample.CustomerService。找不到域 我的配置是: 用于映射的类是 namespace Sample.CustomerService.Domain { public class Product { public virtual i

例外情况是:

无法编译映射文档:WindowsFormsApplication2.Products.hbm.xml

内部的例外是:

持久类Sample.CustomerService.Domain.Products,Sample.CustomerService。找不到域

我的配置是:

用于映射的类是

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();
        }
    }
} 
当我试图通过此代码获取记录时

using (ISession session = SessionFactory.OpenSession)
{
    IQuery query = session.CreateQuery("FROM Products");
    IList<Products> pInfos = query.List<Products>();
    dgView.DataSource = pInfos;
}
使用(ISession session=SessionFactory.OpenSession)
{
IQuery=session.CreateQuery(“来自产品”);
IList pInfos=query.List();
dgView.DataSource=pInfos;
}
它给了我一个错误,无法编译上面解释的映射文档。
我是hibernate新手,我通过visual studio 2012中的manage nugget pcakage选项从nugget.org添加了hibernate,它添加了两个DLL nhhibernate和Iesi.collections。请帮助我修复此错误,我提供了我所知的所有信息。

在映射中,您有产品,并且您的类命名为产品(单数)。因此,它应该是:

<class name="Product" table="Products" lazy="true">


顺便说一句,Nazy是nhibernate的默认值,所以您可以在映射中省略它。此外,如果表名与类名相同,您也可以省略它,最好将映射文件内容保持在最少的必要位置

我们需要的是这样的映射:

<?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>
我们必须这样查询(您能够构建它,这让我们感到惊讶,因为
产品
不在代码中,只
产品

使用(ISession session=SessionFactory.OpenSession)
{
//IQuery=session.CreateQuery(“来自产品”);
var query=session.CreateQuery(“来自产品”);//仅限于产品
//再来一次
//IList pInfos=query.List();
IList pInfos=query.List();
...

请不要插入图像。请插入代码。有关更好的单例实现,请参阅。请注意,Hibernate(用于Java)与NHibernate(用于.Net)不同请使用正确的名称。我知道它的错误,实际上我想说的是nhibernate。我想从fluent nhibernate开始,因为我厌倦了映射中不解决的错误,这使得nhibernate很困难,编写xml然后让它工作是如此痛苦。将类名更改为产品后,得到相同的错误,实际上可能会在粘贴到这里时,我不知怎的改变了,但我在xml文件和cs.files中有相同的类名。我用cubrid nmg工具生成了这个映射文件。问题是映射文件中的程序集名称错误,我随机给出了程序集名称。我猜这就是问题所在,我在它工作的所有地方都更改为相同的程序集名称。但我仍然不知道应该做什么在映射fie中是程序集名称,我刚刚重命名为windowsapplication2到所有名称空间。|我可以在form1.cs和映射文件中有不同的名称空间吗?对于nhibernate,唯一重要的程序集是定义持久类的位置。程序集名称在项目属性页中定义,您在设置或读取此名称时有问题吗?在c之后将类名挂起到products,得到相同的错误,实际上它可能在粘贴到此处时以某种方式发生了更改,但我在xml文件和cs.file中有相同的类名。我使用cubrid nmg工具生成了此映射文件。我在调试时发布intellitrace;;问题是映射文件中的程序集名称错误,我随机给了程序集na我想这就是问题所在,我在它工作的所有地方都更改为相同的程序集名称。但我不知道映射fie中的程序集名称应该是什么,我刚刚重命名为windowsapplication2到所有名称空间。| form1.cs和映射文件中可以有不同的名称空间吗?
public class 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>();
    ...