簡體   English   中英

流利nHibernate加盟

[英]Fluent nHibernate Join

我有一個映射到名為 Rule 的表的實體。 此實體的表具有另一個名為 Category 的表的 FK。 我試圖弄清楚如何從我的 Rule 實體中的 Category 中提取屬性。 我很確定我想在我的實體映射中使用連接,但我不知道如何配置它以使其工作。 這是我的映射:

Join("Category", x => 
{
    x.Map(i => i.CategoryName, "Name");
    x.KeyColumn("CategoryId");
    x.Inverse();
});

這是它正在生成的 SQL...

SELECT ...
FROM Rule rules0_ left outer join Category rules0_1_ on rules0_.Id=rules0_1_.CategoryId
WHERE ...

這是我想要的 SQL。

SELECT ...
FROM Rule rules0_ left outer join Category rules0_1_ on rules0_.CategoryId=rules0_1_.Id
WHERE ...

我似乎在 JoinPart 上找不到任何可以讓我這樣做的東西。 從我找到的少量文檔來看,Subselect 看起來很有希望,但我找不到任何如何使用它的示例。 對此問題的任何建議將不勝感激。 謝謝!

“加入”的名字很糟糕。 NHibernate 映射中的“連接”意味着基於兩個表的主鍵關系的零對一關系。 例如,如果您有一個 User 表和一個 UserAdditionalInfo 表,每個 User 有 0 條或 1 條記錄,您將使用聯接。 UserAdditionalInfo 表可能會引用來自 User 的 PK 作為外鍵和它自己的主鍵。 當 DBA 必須虔誠地為舊版應用程序維護架構時,這種類型的事情很常見,但較新的應用程序需要新字段來存儲相同的概念記錄。

在您的情況下,您實際需要的是引用關系,其中記錄與零個或另一個記錄具有外鍵關系。 你會像這樣流利地設置它:

References(x=>Category)
    .Column("CategoryId")
    .Inverse()
    .Cascade.None();

問題是現在必須映射類別; 它是一個獨立的實體,現在與你的相關。 您的選擇是使用此 model,通過將實體引用設為私有,更改映射以訪問實體,並將“傳遞”編碼為您想要公開的屬性,或使用代碼來“展平”它AutoMapper 之類的工具可在運行時將此深層域 model 投影到平面 DTO 中以供一般使用。 他們都有優點和缺點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM