1

Id を (Fluent NHibernate 経由で) 生成するように設定したい: 割り当て済み。マップされた Id は、次のようにエンティティ内のコンポーネントに含まれるプロパティです。

public class Group
{
    public Group()
    {
    }

    public Group(GroupIdentifier identifier)
    {
       GroupIdentifier = identifier;
    }

    [DataMember]
    public virtual GroupIdentifier GroupIdentifier { get; set; }

    [DataMember]
    public virtual IList<X> Objects { get; set; }
}

public class GroupIdentifier
{
    protected ProtectionGroupIdentifier()
    {
    }

    [DataMember]
    public virtual Guid GroupGuid 
    { get; set; }

}

次のコードを使用して、エンティティ ID を定義します。

.Override<Group>(obj => obj.Id(x => x.GroupIdentifier.GroupGuid).GeneratedBy.Assigned())

エンティティを保存しようとすると、次のエラーが発生します: 例外がスローされました。NHibernate.PropertyNotFoundException: NHibernate.PropertyNotFoundException: クラスでプロパティ 'GroupGuid' のゲッターが見つかりませんでした...

GroupGuid を Group Entity に移動して Id を設定すると、機能します。しかし、GroupIdentifier コンポーネントで必要です。お知らせ下さい。

4

1 に答える 1

2

GroupGuid を GroupIdentifier クラスにカプセル化すると、GUID タイプではなく、カスタム タイプがマッピングされます。Hibernate は、そのカスタム型をデータベースにマップする方法を知る必要があります。NHibernate custom value typeを使用して、その方法を伝える必要があります。

NHibernate 型システムの詳細については、この記事をお読みください。Google 検索で追加 情報を得ることができます。

ただし、これを ID プロパティに使用する予定なので、要件を再確認することをお勧めします: Using custom type for the id property . どうやらそれはあまり良い考えではないようです。

于 2012-06-10T21:26:10.423 に答える