如何处理NHibernate中的常见属性?

如何处理NHibernate中的常见属性?,nhibernate,properties,mapping,Nhibernate,Properties,Mapping,我正在学习NHibernate,当时我定义了一个名为“EntityBase”的抽象类: 一些子类如下所示: public class Role : EntityBase, IAggregateRoot { public virtual string Name { get; set; } public virtual IList<User> Users { get; set; } public virtual IList<Permission>

我正在学习NHibernate,当时我定义了一个名为“EntityBase”的抽象类:

一些子类如下所示:

public class Role : EntityBase, IAggregateRoot
{
    public virtual string Name { get; set; }

    public virtual IList<User> Users { get; set; }

    public virtual IList<Permission> Permissions { get; set; }
}

public class Department : EntityBase, IAggregateRoot
{
    public virtual string Name { get; set; }

    public virtual IList<User> Users { get; set; }
}
public类角色:EntityBase,IAggregateRoot
{
公共虚拟字符串名称{get;set;}
公共虚拟IList用户{get;set;}
公共虚拟IList权限{get;set;}
}
公共类部门:EntityBase,IAggregateRoot
{
公共虚拟字符串名称{get;set;}
公共虚拟IList用户{get;set;}
}
我会在下面写很多*.hbm.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LY.OA.Model.Authority" assembly="LY.OA.Model">
      <class name="Role" table="T_Role" lazy="false">
<id name="Id" column="Id" type="int">
  <generator class="native"></generator>
</id>
<property name="Name">
  <column name="RoleName" sql-type="varchar(30)" not-null="true"></column>
</property>

<bag name="Users" table="T_UserRole" inverse="true" cascade="all" lazy="true">
  <key column="RoleId"></key>
  <many-to-many class="User" column="UserId"/>
</bag>

<!--Common properties-->
<property name="Description" column="DESCRIPTION" type="String"/>
<property name="CreateTime" column="CREATETIME" type="DateTime"/>
<property name="IsDelete" column="ISDELETE" type="Boolean"/>
<property name="Version" column="VERSION" />

  </class>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LY.OA.Model.Authority"   assembly="LY.OA.Model">
  <class name="Department" table="T_Department" lazy="false">
    <id name="Id" column="Id" type="int">
      <generator class="native"></generator>
    </id>
<property name="Name">
  <column name="DepartmentName" sql-type="varchar(30)" not-null="true"></column>
</property>

<!--Common properties-->
<property name="Description" column="DESCRIPTION" type="String"/>
<property name="CreateTime" column="CREATETIME" type="DateTime"/>
<property name="IsDelete" column="ISDELETE" type="Boolean"/>
<property name="Version" column="VERSION" />

  </class>
</hibernate-mapping>

但是,我不会在每个xml中编写这样枯燥的公共属性,但是我可以将这些公共属性放在哪里的文件中,以便每个映射文件都可以引用它们呢?

我猜“公共属性”是指基类中的属性?在NH中映射继承有不同的策略。在这里阅读更多。。。

使用Fluent NHibernate很容易,我鼓励使用它而不是XML映射。如果您一直使用XML,请参阅

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LY.OA.Model.Authority" assembly="LY.OA.Model">
      <class name="Role" table="T_Role" lazy="false">
<id name="Id" column="Id" type="int">
  <generator class="native"></generator>
</id>
<property name="Name">
  <column name="RoleName" sql-type="varchar(30)" not-null="true"></column>
</property>

<bag name="Users" table="T_UserRole" inverse="true" cascade="all" lazy="true">
  <key column="RoleId"></key>
  <many-to-many class="User" column="UserId"/>
</bag>

<!--Common properties-->
<property name="Description" column="DESCRIPTION" type="String"/>
<property name="CreateTime" column="CREATETIME" type="DateTime"/>
<property name="IsDelete" column="ISDELETE" type="Boolean"/>
<property name="Version" column="VERSION" />

  </class>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LY.OA.Model.Authority"   assembly="LY.OA.Model">
  <class name="Department" table="T_Department" lazy="false">
    <id name="Id" column="Id" type="int">
      <generator class="native"></generator>
    </id>
<property name="Name">
  <column name="DepartmentName" sql-type="varchar(30)" not-null="true"></column>
</property>

<!--Common properties-->
<property name="Description" column="DESCRIPTION" type="String"/>
<property name="CreateTime" column="CREATETIME" type="DateTime"/>
<property name="IsDelete" column="ISDELETE" type="Boolean"/>
<property name="Version" column="VERSION" />

  </class>
</hibernate-mapping>