Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
.net NHibernate奇怪错误_.net_Nhibernate - Fatal编程技术网

.net NHibernate奇怪错误

.net NHibernate奇怪错误,.net,nhibernate,.net,Nhibernate,我正在学习NHibernate,但失败了。我感觉到错误信息不准确 请帮忙 错误消息是 The following types may not be used as proxies: SecondSolution.Domain.Product: method get_Id should be 'public/protected virtual' or 'protected internal virtual' SecondSolution.Domain.Product: method set_Id

我正在学习NHibernate,但失败了。我感觉到错误信息不准确

请帮忙

错误消息是

The following types may not be used as proxies:
SecondSolution.Domain.Product: method get_Id should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method set_Id should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method get_Name should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method set_Name should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method get_Category should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method set_Category should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method get_Discontinued should be 'public/protected virtual' or 'protected internal virtual'
SecondSolution.Domain.Product: method set_Discontinued should be 'public/protected virtual' or 'protected internal virtual'
   at NHibernate.Cfg.Configuration.ValidateEntities() in c:\Users\oskar.berggren\Documents\Projects\nhibernate-core-3\src\NHibernate\Cfg\Configuration.cs:line
1052
   at NHibernate.Cfg.Configuration.Validate() in c:\Users\oskar.berggren\Documents\Projects\nhibernate-core-3\src\NHibernate\Cfg\Configuration.cs:line 959
   at NHibernate.Cfg.Configuration.BuildSessionFactory() in c:\Users\oskar.berggren\Documents\Projects\nhibernate-core-3\src\NHibernate\Cfg\Configuration.cs:li
ne 1251
   at SecondSolution.Program.Main(String[] args) in C:\vs_workspace\SecondSolution\SecondSolution\Program.cs:line 22
Press any key to continue . . .
类文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SecondSolution.Domain
{
    class Product
    {
        public Product()
        {
            this.Name = "John";
        }
        public Guid Id { get; set; }        
        public string Name { get; set; }        
        public string Category { get; set; }        
        public bool Discontinued { get; set; }
    }
}
映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"                    
                   assembly="SecondSolution"                    
                   namespace="SecondSolution.Domain">
  <class name="Product">
    <id name="Id">
      <generator class="guid" />
    </id>
    <property name="Name" />
    <property name="Category" />
    <property name="Discontinued" />
  </class>
</hibernate-mapping>

您需要将所有产品属性声明为
virtual

public virtual Guid Id { get; set; }        
public virtual string Name { get; set; }        
public virtual string Category { get; set; }        
public virtual bool Discontinued { get; set; }

正如错误消息所说,NHibernate要求将实体类属性标记为
virtual

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SecondSolution.Domain
{
    class Product
    {
        public Product()
        {
            this.Name = "John";
        }
        public virtual Guid Id { get; set; }        
        public virtual string Name { get; set; }        
        public virtual string Category { get; set; }        
        public virtual bool Discontinued { get; set; }
    }
}

正如其他人所说,你必须使你的财产虚拟化。 但只有当您希望您的实体能够延迟加载时才需要它,请在这里阅读

如果你不想延迟加载,你可以禁用它

<class name="Product" Lazy="false">


那么你就不需要虚拟财产了。

现在就可以了。但“产品”并没有保存到数据库中。我是否要在数据库中手动创建“Product”表?您可以自己创建,也可以让NHibernate来创建,我建议您在这里读一读,以防您使用的是Fluent NHibernate:Not.LazyLoad();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SecondSolution.Domain
{
    class Product
    {
        public Product()
        {
            this.Name = "John";
        }
        public virtual Guid Id { get; set; }        
        public virtual string Name { get; set; }        
        public virtual string Category { get; set; }        
        public virtual bool Discontinued { get; set; }
    }
}
<class name="Product" Lazy="false">