Fluent NHibernate-有许多带条件的映射

Fluent NHibernate-有许多带条件的映射,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个HasMany映射需要一个条件。我有一部分工作,但肯定有比我现在做的更好的方法。我使用的条件需要查看我要加入的另一个表上的属性。到目前为止,我得到的是: HasMany<MetaData>(x => x.MetaData).Table("MetaData") .KeyColumn("DefinitionID") .KeyColumn("TableID") .Where("metadatade1_.SourceTab

我有一个HasMany映射需要一个条件。我有一部分工作,但肯定有比我现在做的更好的方法。我使用的条件需要查看我要加入的另一个表上的属性。到目前为止,我得到的是:

    HasMany<MetaData>(x => x.MetaData).Table("MetaData")
        .KeyColumn("DefinitionID")
        .KeyColumn("TableID")
        .Where("metadatade1_.SourceTable = 'Providers'")
        .Cascade.SaveUpdate();
HasMany(x=>x.MetaData).Table(“MetaData”)
.KeyColumn(“定义ID”)
.KeyColumn(“TableID”)
.Where(“metadatade1.SourceTable='Providers')
.Cascade.SaveUpdate();
在上面的代码中,where子句引用了“metadatade1_2;”,因为它试图完全限定名称,而这就是NH正在生成的名称。我尝试过使用“MetaDataDefinitions.SourceTable”(MetaDataDef…是物理表名),也尝试过使用“SourceTable”本身,但是这些都不起作用


有没有办法不让它尝试在条件中完全限定名称,只传递“SourceTable='Providers'”,或者有没有办法让它引用生成的名称而不必手动插入

简而言之,不是。方法(以及HBM.XML中的
Where=
属性)只接受原始sql,因此容易出现您看到的问题


您最好的选择是不使用集合,而是依靠查询来检索元数据实例。

这并不是我所希望的,但谢谢您的回答!我将采纳您的建议,构建一个查询来检索这些数据。