NHibernate を使用しており、データベース ビューから単一のフィールドをモデルにロードしたいと考えています。状況は次のとおりです。
AVATAR_ID という列を持つ USERS テーブルが 1 つあります。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 プロパティにロードする方法は? ユーザーと関係のある別のモデルとしてロードしたくありません。可能であれば、User のプロパティとして使用したいと考えています。