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; }
}
:流暢マッピングで例えば
あなたが安全にidプロパティを使用できますか?関連するマッピングも同様に役立ちます。 – AlexCuse
私はもう少し周りをつかんで、私はいくつかの進歩をしたと思う。あなたにマッピングを表示する方法がわかりません。私はSharp Architecureフレームワークを使用しており、モデルの生成方法を学んでいません。 –
私はSharp Archの最新バージョンに精通していませんが、IDプロパティをオーバーライド(または* new *を使用)し、コンストラクタを使用してIDを受け入れることで、コードに奇妙なものが2つあります。これは問題につながる可能性があります。 – cbp