0

私は現在、User次のようなエンティティ を持つ ASP.NET MVC アプリケーションに取り組んでいます。

public class User
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; protected set; }
    public virtual string Role { get; protected set; }
    public virtual Location Location { get; protected set; }
}

場所は同じくらい簡単です:

public class Location
{
    public virtual string Id { get; protected set; }
    public virtual string Building { get; protected set; }
    public virtual string City { get; protected set; }
    public virtual string Region { get; protected set; }
}

Userデータベースではなく Active Directory からデータを入力したいので、複雑になります。さらに、データベースに永続化されたいくつかのクラスは、ユーザーをプロパティとして参照します。取得ADUserRepository用がありますが、残りが NHibernate によって管理されている場合、これらのユーザーをオブジェクト グラフに統合する方法がわかりません。

NHibernate がUser、Users テーブルへの外部キーではなく、ID だけを保持する方法はありますか? これを実現するためのコンポーネントとしてマップできますか? IUserTypeまた、翻訳を行うための実装も検討しました。そうすれば、単純なフィールドにマップさADUserRepositoryれ、チェーンに入れられて保存された Id を解決できます。それとも、実際には実現不可能なものをハッキングしようとしていますか? NHibernate を使用するのはこれが初めてなので、洞察や解決策を教えていただければ幸いです。ありがとう。

アップデート

これに関する私の最善の解決策は、 User を IUserType にマップし、返される前にオブジェクトにデータを入力するためのサービスを (できれば StructureMap を使用して) 注入することです。その観点から、カスタム ByteCodeProvider の必要性を主に示唆するトピックを扱ういくつかの質問があります。IUserType がパラメーター化されたコンストラクターを取得するために、またはここでコメントを行うために、これを行う必要がありますか? NHibernate.ByteCode.LinFu.dll

4

1 に答える 1

0

Usertype を使用してユーザーを ID に変換し、元に戻す

public class SomeClass
{
    public virtual string Id { get; protected set; }
    public virtual User User { get; protected set; }
}

// in FluentMapping (you have to translate if you want to use mapping by code)

public SomeClassMap()
{
    Map(x => x.User).Column("user_id").CustomType<UserType>();
}

public class UserType : IUserType
{
    void NullSafeSet(...)
    {
        NHibernateUtil.Int32.NullSafeSet(cmd, ((User)value).Id, index);
    }
    void NullSafeGet(...)
    {
        int id = (int)NHibernateUtil.Int32.NullSafeGet(cmd, ((User)value).Id, index);
        var userrepository = GetItFromSomeWhere();
        return userrepository.FindById(id);
    }
}
于 2012-06-08T07:06:54.143 に答える