NH 3.2 と互換性のある FluentNhibernate のビルドと共に Nhibernate 3.2 を使用しており、システムのレガシー部分をマッピングするようになりました。私が必要とすることは可能だと思いますが、正しくマッピングするにはいくつかの支援が必要です。
以下に、アプリケーションのリストを含むユーザー クラスがあります。
public class User
{
public virtual string UserID { get; set; }
public virtual int Id { get; set; }
public virtual IList<Application> Applications { get; set; }
}
「主キー」ではないユーザークラスに戻る外部キーを持つアプリケーションクラスもあります。下記参照
public class Application
{
// Not sure if this 'User' is needed?
public virtual User User { get; set; }
public virtual int IdFromUserTable { get; set; }
public virtual string ApplicationName { get; set; }
}
対応する ClassMaps があります。UserMap に問題があると思います
ユーザーマップ
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.UserID);
HasMany(x => x.Applications)
.AsBag()
.KeyColumn("UserID")
.PropertyRef("Id")
.LazyLoad()
.Inverse();
Table("usertable");
ReadOnly();
}
}
アプリケーションマップ
public class ApplicationMap : ClassMap<Application>
{
public ApplicationMap()
{
CompositeId()
.KeyProperty(x => x.ApplicationName)
.KeyProperty(x => x.IdFromUserTable, "UserID");
Table("applicationstable");
}
}
テーブル構造は次のとおりです。
ユーザーテーブル
Primary Key - string, ColumnName = UserID
int (Identity) - int, ColumnName = Id
アプリケーション表
Composite Key - string, ColumnName = ApplicationName
and
int, ColumnName = UserId (references Id column in user table)
私の質問は、上記のシナリオでマッピングを機能させる方法です。
1 つの注意点: データベースの構造は変更できませんが、クラス/クラスマップは変更できます。
どんな助けでも大歓迎です..
PS - HasMany userMap に Fetch.Join を追加することでこれを機能させましたが、必要に応じてアプリケーション リストを遅延評価したいと思います。
ありがとう、マーク