我們在BOM中使用codefluent實體,在控制器中使用webapi,在客戶端使用angularjs Framework。關係中的序列化方法
當在父對象中存儲對象的引用時,我們正面臨一個問題。任何時候,引用都會被生成的代碼清空。
給定一個帶有關係ENTA [EntAId,PROP1,EntB]和EntB兩個實體[EntBId,PROP1,PROP2] 我結束了兩類:
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"));
}
}
在客戶端(使用Angular)我wa nt在不發送整個EntB對象的情況下注冊objectA.EntBEntBId
。因此我會考慮下面的這個片段來使EntB無效。
if(objectA.EntB)
objectA.EntB = null
這最終發送正確的流到服務器(沒有整個B對象被序列化)。
當HTTP PUT調用被觸發時,webapi將首先評估首先經過get/set方法的類。屬性EntBEntBId將被正確評估,但是然後EntB屬性的setter將繼續擦除先前的值(因爲EntB當前爲空)。
有什麼辦法可以避免這種行爲?
在此先感謝您的回答;
似乎是一個很好的解決方案。也許你可以在刪除它的屬性之前克隆JavaScript對象。在使用angularjs時,可以使用[HttpInterceptor](https://docs.angularjs.org/api/ng/service/$http) – meziantou