我们在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)我想注册objectA.EntBEntBId
而不发送整个EntB对象。因此,我会考虑下面的代码片段来取消EntB。
if(objectA.EntB)
objectA.EntB = null
最终将正确的Stream发送到服务器(没有整个B对象被序列化)。
当触发HTTP PUT调用时,webapi将首先通过get / set方法对类进行评估。属性EntBEntBId将被正确评估,但然后设置EntB属性将保持删除以前的值(因为EntB当前为null)。
有没有办法避免这种行为?
提前感谢您的回答;
答案 0 :(得分:1)
我可能会回答我自己的问题,但在使用delete objectA.entB
代替objectA.entB = null
时,Stream不会包含entB属性,因此不会通过它的setter。