0

我正在使用 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 列加载到我的用户对象的 AvatarPath 属性中?我宁愿不将它作为与用户有关系的单独模型加载。如果可能的话,我希望它作为用户的属性。
4

1 回答 1

3

您可以将其映射为公式

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

除此之外,您可以将模型和引用设为私有,这样它就不会出现在外面

于 2013-02-18T19:12:32.347 回答