2013-02-18 28 views
0

我正在使用NHibernate並希望從數據庫視圖加載單個字段到我的模型中。這是的情況:使用NHibernate從數據庫視圖加載數據

我有一個USERS表,其中有一列名爲AVATAR_ID。數據庫中還有一個名爲VIEW_RESOURCES的獨立視圖。該視圖包含一個ID和一個PATH列。該ID可以與存儲在AVATAR_ID列中的值相匹配。

在SQL我會做以下幾點:

select U.ID, U.USERNAME, R.PATH 
from USERS U 
left join VIEW_RESOURCES R on R.ID = U.AVATAR_ID 
where U.ID = ... 

我已經定義了一個模型的屬性在我的C#代碼如下:

public virtual Id { get; protected set; } 
public virtual string UserName { get; set; } 
public virtual string AvatarPath { get; protected set; } 

我使用FluentNHibernate爲該映射如下所示:

Table("USERS"); 
Id(x => x.Id).GeneratedBy.Identity().Column("ID"); 
Map(x => x.UserName).Column("USERNAME").Not.Nullable().Length(256); 

用於加載單個用戶的代碼如下所示:

User user = session 
.QueryOver<User>() 
.Where(x => x.Id == id) 
.SingleOrDefault(); 

到目前爲止好,但我需要知道的是:

  • 如何定義的AvatarPath映射?
  • 如何將VIEW_RESOURCES視圖的PATH列加載到我的User對象的AvatarPath屬性中?我寧願不加載它作爲與用戶有關係的單獨模型。如果可能的話,我希望它作爲用戶的財產。

回答

3

,你可以將其映射爲公式

Map(x => x.AvatarPath).Formula("(SELECT R.PATH FROM VIEW_RESOURCES R WHERE R.ID = AVATAR_ID)"); 

以外,你會可以使模型和參考私人所以它不會去外面