代码之家  ›  专栏  ›  技术社区  ›  Gabe Moothart

nHibernate映射错误-子元素“多对一”无效

  •  0
  • Gabe Moothart  · 技术社区  · 15 年前

    使用fluent nhibernate和automapping,我尝试映射以下域:

    public class Company: IModel
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
    }
    
    public class Account: IModel
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual Company Company { get; set; }
    }
    

    一个公司可以有多个账户。一般来说,我会直接得到一个帐户,然后偶尔想找到关联公司,所以不需要在公司模型上列出帐户列表。

    Fluent NHibernate创建以下HBMS:

    单位

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
      <class xmlns="urn:nhibernate-mapping-2.2" name="DataModel.Company, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Company`">
        <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <column name="Id" />
          <generator class="identity" />
        </id>
        <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <column name="Name" />
        </property>
      </class>
    </hibernate-mapping>
    

    帐户

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
      <class xmlns="urn:nhibernate-mapping-2.2" name="DataModel.Account, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Account`">
        <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <column name="Id" />
          <generator class="identity" />
        </id>
        <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <column name="Name" />
        </property>
        <many-to-one class="DataModel.Company, DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Company">
          <column name="Company_id" />
        </many-to-one>
      </class>
    </hibernate-mapping>
    

    我得到以下错误:

    命名空间中的元素“class” 'urn:nhibernate-mapping-2.2'具有 中的子元素“多对一”无效 命名空间 “urn:nhibernate-mapping-2.2”。名单 应输入可能的元素:“meta, 选择、缓存、同步, comment,tuplizer,id,复合id' 命名空间中 “urn:nhibernate-mapping-2.2”。

    要使其成为有效的映射,我需要做什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Gabe Moothart    15 年前

    问题不在这些域类中。我在同一个程序集中有一个知识库类,FluenHibernate显然试图将其包含在域中。正是试图映射此类导致了错误(很遗憾,错误消息没有说明是哪种类型导致了问题)。

    我通过添加 where 命名空间上的约束。