代码之家  ›  专栏  ›  技术社区  ›  user366312

使用nhibernate.mapping.attributes进行简单的一对多映射

  •  2
  • user366312  · 技术社区  · 15 年前

    有人能给我提供一个Web链接,它非常清楚地描述基于属性的简单一对多映射吗?

    例如(一家公司只能有一个原产国。但一个国家有许多公司):

    class Company
    {
    }
    
    class Country
    {
        IList<Company> Items;
    }
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   Lachlan Roche    15 年前

    对于您的示例类,并将包用于无序集合:

    using Map = NHibernate.Mapping.Attributes;
    
    [Map.Class( 0, Table = "country", NameType=typeof(Country) )]
    public class Country
    {
        [Map.Id( 1, Name = "Id" )]
        [Map.Generator( 2, Class = "identity" )]
        public virtual int Id { get; set; }
        [Map.Property]
        public virtual string Name { get; set; }
        [Map.Bag( 0, Table = "country_company" )]
        [Map.Key( 1, Column = "countryid" )]
        [Map.OneToMany( 2, ClassType = typeof( Company ) )]
        public virtual IList<Company> Items { get; set; } 
    }
    
    [Map.Class( 0, Table = "country_company", NameType = typeof( Company ) )]
    public class Company
    {
        [Map.Id( 1, Name = "Id" )]
        [Map.Generator( 2, Class = "identity" )]
        public virtual Guid Id { get; set; }
        [Map.Property]
        public virtual string Name { get; set; }
    }
    

    生成以下hbm.xml:

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
        <class name="nh.Country, nh" table="country">
            <id name="Id">
                <generator class="identity" />
            </id>
            <property name="Name" />
            <bag name="Items" table="country_company">
                <key column="countryid" />
                <one-to-many class="nh.Company, nh" />
            </bag>
        </class>
        <class name="nh.Company, nh" table="country_company">
            <id name="Id">
                <generator class="identity" />
            </id>
            <property name="Name" />
        </class>
    </hibernate-mapping>