1

私は、NHibernate で永続化される設計を実現する最善の方法を見つけようとしています。理想的なデータは次のようになります。

Person
===============
Id (int)
Name (nvarchar)


Privileges
==============
Person_Id
Right (int)
AccessLevel (int)

理想的には、次のようなクラスを作成できます (すべての NHibernate 仮想修飾子を持っているふりをします)。

public enum Rights
{
    Read = 0,
    Save = 1,
    Delete = 2
}

public enum AccessLevels
{
    LevelOne = 0,
    LevelTwo = 1,
    LevelThree = 2
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Dictionary<Rights, AccessLevels> Privileges { get; set; }
}

もともと、このブログ投稿で説明されている設計Rightsを検討していましたが、特定の権限の Id を追跡することなくテストできるようにしたいので、列挙型をクラスにしたくありません。列挙のペアが最も簡単だと思います。

とにかく、私は NHibernate、ましてや Fluent NHibernate でこれを達成する方法を考え出しました。NHの達人が助けてくれることを願っています。

4

1 に答える 1

0

それが可能かどうかはわかりません...しかし、次のようなことを試してください(私はテストしませんでした):

 HasMany(x => x.Privileges)
            .WithTableName("Privileges")
            .KeyColumnNames.Add("Person_Id")
            .Cascade.All()
            .AsMap<string>(
                index => index.WithColumn("Right").WithType<Rights>(),
                element => element.WithColumn("AccessLevel").WithType<AccessLevels>()
            );
    }

またはこのようなもの:

References(x => x.Privileges).AsMap<Rights>("Right").Element("AccessLevel", c => c.Type<AccessLevels>());.

このスレッドを見てください: Fluent NHibernate automapping を使用して辞書をマップするにはどうすればよいですか?

于 2012-07-10T20:11:54.087 に答える