繁体   English   中英

v4.0的NHibernate映射错误

[英]NHibernate Mapping Error with v4.0

我正在使用VS 2013 32位,nHibernate v4.0.0.4000。 我是nHiberNate的新手,无论如何,我可以避免使用流利的映射创建。 我需要到目前为止无法找到的良好的工作样本。

我收到以下代码的错误。

附加信息:无法编译映射文档:C:\\ Project ... \\ Some \\ Models \\ NHibernate \\ Mappings \\ SomeInfo.hbm.xml

InnerException:{“尝试通过反射设置属性类型的问题”}

代码与映射-----

My class:
namespace Some.Models
{
    public class SomeInfo 
    {
        public long     Form_Id { get; set; }   
        public string   Account_Id { get; set; } 
        public char     Entity { get; set; }
        public string   Name { get; set; }
        public decimal  Ownership_Percent { get; set; } 
    }
}

映射实例创建:

namespace Some.Models
{
    public class Hibernate_Connection
    {
        ISessionFactory sessionFactory;        
        ISession OpenSession()
        {
            if (sessionFactory == null)
            {
                var cgf = new Configuration();
                var data = cgf.Configure(HttpContext.Current.Server.MapPath(@"Models\NHibernate\Configuration\hibernate.cfg.xml"));
                cgf.AddDirectory(new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath(@"Models\NHibernate\Mappings")));
                sessionFactory = data.BuildSessionFactory();
            }
            return sessionFactory.OpenSession();
        }

映射:Models / NHiberNate / Mappings / SomeInfo.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping 
xmlns="urn:nhibernate-mapping-2.2" 
assembly="Some" 
namespace="Some.Models" 
auto-import="true"> 
<class name="SomeInfo" table="Some_Table" lazy="false"> 
  <!--<id name="ID" column="Form_Id" Type="Long">
       <generator class="native"></generator> </id>-->
  <id name="ID" column="Form_Id"> 
     <generator class="native"></generator> 
  </id>
  <property name="Form_Id" column="Form_Id"></property> 
  <property name="Account_Id" column="Account_Id"></property> 
  <property name="Entity" column="Entity"></property> 
  <property name="Name" column="Name"></property>   
  <property name="Ownership_Percent" access="property" 
            column="Ownership_Percent" type="Decimal"></property> 
</class> 
</hibernate-mapping> 

您的模型属性必须是虚拟的:

    public class SomeInfo 
    {
        public virtual long     Form_Id { get; set; }   
        public virtual string   Account_Id { get; set; } 
        public virtual char     Entity { get; set; }
        public virtual string   Name { get; set; }
        public virtual decimal  Ownership_Percent { get; set; } 
    }

我想如果您提供完整的例外,我们将在堆栈跟踪中看到如下消息:

...在类'Some.Models.SomeInfo'中找不到属性'ID'的吸气剂...

因为该映射指示NHibernate映射C#属性ID

<id name="ID" column="Form_Id"> 
  <generator class="native"></generator> 
</id>

并且没有属性ID 另外,同一列Form_Id第二个映射

<property name="Form_Id" column="Form_Id"></property> 

这不是应该的方式。 我们应该将列映射到一个属性。 因此,此映射应该有效

<class name="SomeInfo" table="Some_Table" lazy="false"> 
  <id name="Form_Id" column="Form_Id"> 
     <generator class="native"></generator> 
  </id>
  <property name="Account_Id" column="Account_Id"></property> 
  ...
</class> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM