2011-05-05 4 views
1

NHibernateの初心者で、NHibernate 2.1.2.4000 FluentNHibernateバージョン1.1.0.685を使用して奇妙な動作が発生しています。あなたがItemオブジェクトに最初にアクセスした後、何とかGUIDであるIDが空にリセットされています。 2行目のように関連するオブジェクトにアクセスするときに起こる副作用はありますか?NHibernate、関連オブジェクトにアクセスした後にプロパティをリセットする

1. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id); 
2. var ItemStageId = widgetQueue.Item.CurrentStage.Id.ToString(); 
3. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id); 

Output Window: 
113a6af2-3fe2-49c2-9276-9ec30081a811  
00000000-0000-0000-0000-000000000000 

アップデート:私は新しい仮想からIDフィールドを変更し

public class Item : EntityWithTypedId<Guid> 
{ 
    private Guid id; 

    [DomainSignature] 
    public new virtual Guid Id 
    { 
     get { return id; } 
     protected set { id = value; } 
    } 
    .... 
    public Item() { 
     Id = Guid.Empty; 
     .... 
    } 

    public Item(Guid id) 
     : base() 
    { 
     Id = id; 
    } 
} 

オーバーライドへ:

public class Item : EntityWithTypedId<Guid> 
{ 
    private Guid id; 

    [DomainSignature] 
    public override Guid Id 
    { 
     get { return id; } 
     protected set { id = value; } 
    } 
    .... 
} 

私はランタイムエラー以降を期待していました私は読む遅延ロードが機能するためには、プロパティを仮想にする必要があります。何が起きているのか?

更新2:Idプロパティをサポートするインスタンス変数が宣言されていることに気付きました。だから、私はそれを削除し、基本クラスのIDにアクセスしました。これはうまくいっていて、以前の試みが失敗した理由をまだ見つけていません。

パブリッククラスItem:EntityWithTypedId { //私的なGuid id;

[DomainSignature] 
    public new virtual Guid Id 
    { 
     get { return base.Id; } 
     protected set { base.Id = value; } 
    } 
+0

:流暢マッピングで例えば

あなたが安全にidプロパティを使用できますか?関連するマッピングも同様に役立ちます。 – AlexCuse

+0

私はもう少し周りをつかんで、私はいくつかの進歩をしたと思う。あなたにマッピングを表示する方法がわかりません。私はSharp Architecureフレームワークを使用しており、モデルの生成方法を学んでいません。 –

+1

私はSharp Archの最新バージョンに精通していませんが、IDプロパティをオーバーライド(または* new *を使用)し、コンストラクタを使用してIDを受け入れることで、コードに奇妙なものが2つあります。これは問題につながる可能性があります。 – cbp

答えて

1

EntityWithTypedIdはすでにIdプロパティを定義しています。自分で宣言する必要はありません。あなたのウィジェットキューとアイテムのクラスのコードを投稿することができ

Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty); 
+0

知っておくと便利ですが、[DomainSignature]属性も取得できますか? –

+0

いいえ、私が理解しているように、 '[DomainSignature]'は、サロゲートキーではなく自然キーです。 Id-Propertyは永続性のためのもので、上記のコードを使用し、nhibernateによって処理されます。 – Firo

関連する問題