有沒有一種方法可以過濾HasManyToMany映射中的行?FluentNHibernate HasManyToMany條件映射
我有三個表(傳統,無法更改它們)服務,資源和ResourceService。 ResourceService允許多個資源鏈接到多個服務,但它也有一個「活動」列。
在我的資源域對象上,我用一個「ProvidedBy」屬性映射了鏈接到資源的服務,該屬性返回一個服務數組。問題是我只需要來自標記爲活動的服務的行。
我在這裏錯過了一些基本的東西嗎?
有沒有一種方法可以過濾HasManyToMany映射中的行?FluentNHibernate HasManyToMany條件映射
我有三個表(傳統,無法更改它們)服務,資源和ResourceService。 ResourceService允許多個資源鏈接到多個服務,但它也有一個「活動」列。
在我的資源域對象上,我用一個「ProvidedBy」屬性映射了鏈接到資源的服務,該屬性返回一個服務數組。問題是我只需要來自標記爲活動的服務的行。
我在這裏錯過了一些基本的東西嗎?
流利的NHibernate版本1.0不支持NHibernate過濾器或filter-defs。我向詹姆斯格雷戈裏提交了一個補丁,並且他們現在已經整合到了後備箱中,所以如果你獲得了後備箱而不是發佈版本,你會發現包含這種功能的能力。
本質上講,你可以設置從FilterDefinition
繼承像這樣一類:
public class TestFilter : FilterDefinition
{
public TestFilter()
{
WithName("test")
.WithCondition("Age > :age")
.AddParameter("age", NHibernateUtil.Int32);
}
}
,然後在你的流利的映射應用此過濾器:
HasManyToMany(x => x.Oldies)
.Table("People")
.ApplyFilter<TestFilter>();
您可以設置參數值,啓用過濾器使用會話對象正常:
session.EnableFilter("test").SetParameter("age", 65);
Wouldn這是否是Where
的候選人?
HasManyToMany(x => x.Whatevers)
.Where(x => x.Active);
恐怕不行。我希望過濾的列是「ResourceService」表,它是鏈接表。 我沒有給它一個鏡頭,但是編譯器不喜歡它: HasManyToMany(功能(O作爲服務)o.ProvidedBy)_ .Cascade()_ 。所有()_ 。表(「ResourceService 「)_ .ParentKeyColumn(」ServiceId「)_ .ChildKeyColumn(」ResourceId「)_ .Where(Function(x As ResourceService)x.Active) – 2009-12-18 11:45:33
Blasted formatting。 – 2009-12-18 11:46:07
您可以使用過濾器實際實現外部連接條件。
夥計,你讓我卡在網絡上的遞歸循環! – 2011-05-03 14:36:48
這似乎給我想要做的,但如果說流利不支持任何其他方法,我想這是我必須做的相當重量級的! – 2009-12-14 09:29:52
這不是什麼Fluent支持的問題,而是NHibernate支持的問題。如果您願意,您可以隨時使用XML映射文件來定義和應用您的過濾器......;) – 2009-12-14 09:34:16