我的课程:
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> Children { get; set; }
/* other properties */
}
public class Child
{
public virtual int Id { get; set; }
public virtual Parent Mother { get; set; }
public virtual int ItemNumber { get; set; }
public virtual string Remarks { get; set; }
/* other properties */
}
我的数据库:
PARENTS(ID, NAME, ...) -> PRIMARY KEY = ID
CHILDREN (C_ID, MOTHER_ID, ITEM_NO, REMARKS ....) -> PRIMARY KEY = c_ID
NHibernate 映射:
<class name="Parent" table="PARENTS">
<id name="Id" column="ID">
<generator class="increment" />
</id>
<property name="Name" column="NAME"/>
<list name="Children" cascade="all" inverse="true">
<key column="MOTHER_ID" not-null="true" />
<list-index base="1" column="ITEM_NO"/>
<one-to-many class="Child" />
</list>
</class>
<class name="Child" table="CHILDREN">
<id name="Id" column="C_ID">
<generator class="increment" />
</id>
<many-to-one name="Mother" class="Parent" column="MOTHER_ID" />
<property name="ItemNumber" column="ITEM_NO"/>
<property name="Remarks" column="REMARKS"/>
</class>
我的代码:
Parent p = new Parent();
//set parent properties here
Child c = new Child();
//set child properties here
p.Children.add(c);
c.Mother = p;
//Save parent
问题:
上面的代码将父项以及所有子项保存在相应的表中。但是,所有子项在 ITEM_NO 字段中的默认值为零。是否有任何映射可以帮助我自动为给定父母的每个孩子从 1 开始为 ITEM_NO 分配一个递增的值?即 ITEM_NO 的序列应该从 1 重复到每个父级的子级数。
注意:我需要 Child 是一个独立的实体,所以我应该能够在不需要通过父母的情况下查询它。