我正在使用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();
到目前为止一切顺利,但我需要知道的是:
答案 0 :(得分:3)
您可以将其映射为公式
Map(x => x.AvatarPath).Formula("(SELECT R.PATH FROM VIEW_RESOURCES R WHERE R.ID = AVATAR_ID)");
除此之外,您可以将模型和引用设为私有,以便它不会出现