我有以下FNH地图:
public class ItemMap : ClassMap<Item>
{
public ItemMap ()
{
this.HasManyToMany(a => a.ChildItems).ChildWhere("IsDeleted = 0").AsSet();
}
}结果hbm文件为:
<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的“按代码特性进行性感映射:-) /一致性方法”实现相同的映射。
注意:以下方法不起作用:
public class ItemMap : ClassMapping<Item>
{
public ItemMap()
{
this.Set(x => x.ChildItems
, map =>
{
map.Where("IsDeleted = 0");
}
, action => action.ManyToMany());
}
},因为:,它遵循FNH映射:
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文件是:
<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文件是:
<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>谁有类似的问题或能提供解决方案?需要帮助。
发布于 2012-03-16 14:39:43
我也遇到了同样的问题,我找到了一个解决办法:
https://nhibernate.jira.com/browse/NH-2997
解决办法分三个步骤:
1)向IManyToManyMapper接口添加新的接口方法:
public interface IManyToManyMapper : IColumnsMapper {
`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; }
https://stackoverflow.com/questions/8732692
复制相似问题