簡體   English   中英

NHibernate,如何將屬性映射到子選擇

[英]NHibernate, how to map a property to a subselect

我目前有一個遺留系統,它使用SP專門訪問數據庫。 我的域對象看起來像這樣:

public class User : EntityBase
{
    public virtual string Name {get;set;}
    public virtual string CreatedBy {get;set;}
    public virtual DateTime CreatedDate {get;set;}
}

我有這個映射的SP看起來像這樣:

CREATE PROCEDURE getUser
{
    @ID int
}
select
     Name
     ,(SELECT TOP 1 UserName FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedBy
     ,(SELECT TOP 1 DateStamp FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedDate
     FROM [User]
     WHERE [User].ID = @ID

因此,如您所見,審計信息在數據庫中與實體本身分開,CreatedBy / CreatedOn(和ModifiedBy / ModifiedOn)存儲在名為AuditTrail的單獨表中。 表上的AuditActionID字段指定它是否是創建/更新。

如何使用NHibernate設置此映射? 我查看了JOIN,但它沒有給我選項來限制其他值(並且連接不是我想要的)。

另外,如果在Fluent NHibernate中這是可能的,這是一個額外的獎勵,但我很好,只要嘗試標准的NHibernate映射配置,如果它讓我在那里。

更新:

我找到了一種方法來做到這一點,但我不是粉絲。 我已經設置了一個SQLQuery來讀取數據並將其映射回一個對象。 它有效,但我喜歡通過映射來做到這一點。 它是否可能,因為我映射到的數據庫中的“值”是一個子選擇而不可編輯?

解:

感謝迭戈的提示,這是我找到的最終解決方案(在我的ClassMap文件中使用Fluent NHibernate):

Map(x => x.CreatedBy).Formula("(SELECT TOP 1 AuditTrail.UserName FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");
Map(x => x.CreatedDate).Formula("(SELECT TOP 1 AuditTrail.DateStamp FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");

謝謝,M

您可以將select子句指定為屬性的formula

暫無
暫無

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

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