NH3.2使用'where'子句按代码映射

时间:2012-01-03 15:10:32

标签: nhibernate fluent-nhibernate nhibernate-mapping

我尝试使用MappingByCode中的NH3.2来定义与'where'子句的多对多关系,但我不知道该怎么做。

使用FluentNHibernate我可以使用ChildWhere()方法:

 public class ProcedureMap : ClassMap<Procedure>
 {
        public ProcedureMap()
        {
            this.HasManyToMany(a => a.FormTemplates).ChildWhere("IsDeleted = 0").AsSet();
        }
 }

此代码将生成下一个HBM:

 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="Procedure" table="Procedure">
    <set name="FormTemplates" table="ProceduresToFormTemplates">
      <key foreign-key="FK_Procedures_FormTemplates">
        <column name="ProcedureId" />
      </key>
      <many-to-many class="FormTemplate" where="IsDeleted = 0">
        <column name="FormTemplateId" />
      </many-to-many>
    </set>
  </class>
 </hibernate-mapping>

如何使用MappingByCode中的NH3.2获取相同的地图?

1 个答案:

答案 0 :(得分:0)

您可以在多对多映射中使用过滤方法。

this.Bag(
   x => x.Procedure,
   m =>
     {
         m.Table("Procedure");
         m.Key(k => k.Column("ProcedureId"));
         m.Filter("NoDeleted", mapper => mapper.Condition("IsDeleted = 0"));
     },
   x => x.ManyToMany(
           map =>
                {
                    map.Column("FormTemplateId");
                }));