首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NH3.2中实现多到多关系的.ChildWhere()映射

如何在NH3.2中实现多到多关系的.ChildWhere()映射
EN

Stack Overflow用户
提问于 2012-01-04 19:20:37
回答 1查看 596关注 0票数 2

我有以下FNH地图:

代码语言:javascript
复制
public class ItemMap : ClassMap<Item>
{
   public ItemMap ()
   {
       this.HasManyToMany(a => a.ChildItems).ChildWhere("IsDeleted = 0").AsSet();
   }
}

结果hbm文件为:

代码语言:javascript
复制
<hibernate-mapping>
  <class name="Item" table="Item">
    <set name="ChildItems" table="ItemsToChildItems">
      ...
      <many-to-many class="ChildItem" where="IsDeleted = 0">
        <column name="ChildItemId" />
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>

我希望使用NHibernate 3.2的“按代码特性进行性感映射:-) /一致性方法”实现相同的映射。

注意:以下方法不起作用:

代码语言:javascript
复制
public class ItemMap : ClassMapping<Item>
{
   public ItemMap()
   {
      this.Set(x => x.ChildItems
      , map =>
      {
         map.Where("IsDeleted = 0");
      }
      , action => action.ManyToMany());
   }
}

,因为:,它遵循FNH映射:

代码语言:javascript
复制
public class ItemMap : ClassMap<Item>
{
   public ItemMap ()
   {
      this.HasManyToMany(a => a.ChildItems).Where("IsDeleted = 0").AsSet();
   }
}

.Where("IsDeleted = 0")和.ChildWhere("IsDeleted = 0")不一样。

HBM差异:

结果使用.ChildWhere("IsDeleted = 0")的hbm文件是:

代码语言:javascript
复制
<hibernate-mapping>
  <class name="Item" table="Item">
    <set name="ChildItems" table="ItemsToChildItems">
      ...
      <many-to-many class="ChildItem" where="IsDeleted = 0">
        <column name="ChildItemId" />
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>

结果使用.Where("IsDeleted = 0")的hbm文件是:

代码语言:javascript
复制
<hibernate-mapping>
  <class name="Item" table="Item">
    <set name="ChildItems" table="ItemsToChildItems" where="IsDeleted = 0">
      ...
      <many-to-many class="ChildItem">
        <column name="ChildItemId" />
      </many-to-many>
    </set>
  </class>
</hibernate-mapping>

谁有类似的问题或能提供解决方案?需要帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-03-16 14:39:43

我也遇到了同样的问题,我找到了一个解决办法:

https://nhibernate.jira.com/browse/NH-2997

解决办法分三个步骤:

1)向IManyToManyMapper接口添加新的接口方法:

public interface IManyToManyMapper : IColumnsMapper {

代码语言:javascript
复制
`void Where(string sqlWhereClause);  }`

2)在ManyToManyCustomizer类中实现新方法:

public void Where(string sqlWhereClause) { customizersHolder.AddCustomizer(propertyPath, (IManyToManyMapper x) => x.Where(sqlWhereClause)); }

3)在ManyToManyMapper类中实现新方法:

public void Where(string sqlWhereClause) { manyToMany.where = sqlWhereClause; }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8732692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档