2

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 を追加することでこれを機能させましたが、必要に応じてアプリケーション リストを遅延評価したいと思います。

ありがとう、マーク

4

0 に答える 0