【问题标题】:NHibernate Mapping Error with v4.0v4.0 的 NHibernate 映射错误
【发布时间】:2015-09-20 03:30:06
【问题描述】:

我正在使用 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> 

【问题讨论】:

    标签: c# nhibernate nhibernate-mapping


    【解决方案1】:

    您的模型属性需要是虚拟的:

        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; } 
        }
    

    【讨论】:

      【解决方案2】:

      我猜如果你提供完整的异常,我们会看到 (在堆栈跟踪中) 消息如下:

      ...在“Some.Models.SomeInfo”类中找不到属性 'ID' 的 getter ...

      因为映射指示 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> 
      

      这不是应该的样子。我们应该将 one 列映射到 one 属性。所以,这个映射应该是有效的

      <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> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 2014-11-20
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多