BOM には codefluent エンティティ、コントローラーには webapi、クライアント側には angularjs フレームワークを使用しています。
オブジェクトの参照を親オブジェクトに保存するときに問題に直面しています。いつでも、生成されたコードによって参照が無効になります。
リレーションシップ EntA[EntAId, prop1, EntB] と EntB[EntBId, prop1, prop2] を持つ 2 つのエンティティがある場合、最終的に 2 つのクラスになります。
class EntA{
EntAId
prop1
EntB
EntBEntBId
}
と
class EntB{
EntBId
prop1
prop2
}
CodeFluent は次のコードを生成しました。
[System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]
[System.ComponentModel.DataObjectFieldAttribute(true)]
public System.Guid EntBEntBId
{
get
{
if (((this._EntBEntBId.Equals(CodeFluentPersistence.DefaultGuidValue) == true)
&& (this._entB != null)))
{
this._EntBEntBId = this._entB.EntBId;
}
return this._EntBEntBId;
}
set
{
if ((System.Collections.Generic.EqualityComparer<System.Guid>.Default.Equals(value, this.EntBEntBId) == true))
{
return;
}
this._entB = null;
this._EntBEntBId = value;
this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntB"));
this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntBEntBId"));
}
}
[System.Xml.Serialization.XmlIgnoreAttribute()]
public Namespace.EntB.EntB EntB
{
get
{
if ((this._entB == null))
{
this._entB = Namespace.EntB.EntB.Load(this._EntBEntBId);
}
return this._entB;
}
set
{
this._EntBEntBId = CodeFluentPersistence.DefaultGuidValue;
this._entB = value;
this.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Modified;
this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntB"));
this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("EntBEntBId"));
}
}
objectA.EntBEntBId
クライアント側 (Angular を使用) では、EntB オブジェクト全体を送信せずに登録したいと考えています。したがって、以下のスニペットを使用して EntB を無効にすることを検討します。
if(objectA.EntB)
objectA.EntB = null
これにより、正しい Stream がサーバーに送信されます (B オブジェクト全体がシリアル化されることはありません)。
HTTP PUT 呼び出しがトリガーされると、webapi は最初に get/set メソッドを通過してクラスを評価します。プロパティ EntBEntBId は正しく評価されますが、EntB プロパティのセッターは以前の値を消去し続けます (EntB は現在 null であるため)。
このような動作を回避する方法はありますか?
回答ありがとうございます。