我有一个需要条件的HasMany映射。我有这个部分工作,但必须有一个比我正在做的更好的方式。我正在使用的条件需要查看我正在加入的另一个表上的属性。到目前为止我所拥有的是:
HasMany<MetaData>(x => x.MetaData).Table("MetaData")
.KeyColumn("DefinitionID")
.KeyColumn("TableID")
.Where("metadatade1_.SourceTable = 'Providers'")
.Cascade.SaveUpdate();
在上面的代码中,where子句引用“metadatade1_”,因为它试图完全限定名称,这就是NH正在生成的名称。我已经尝试过使用“MetaDataDefinitions.SourceTable”(MetaDataDef ...是物理表名称),而且它本身也只是“SourceTable”,但这些都不起作用。
有没有办法不让它尝试并在条件上完全限定名称并只传递“SourceTable ='Providers'”或者有没有办法让它引用生成的名称而不必手动插入它在?
答案 0 :(得分:3)
简而言之,没有。 Where
方法(以及HBM.XML中的where=
属性)只接受 raw sql ,因此容易出现您遇到的问题。
您最好的选择是不使用集合,而是依赖查询来检索元数据实例。