我们为 BOM 使用 codefluent 实体,为控制器使用 webapi,在客户端使用 angularjs 框架。
在父对象中存储对象的引用时,我们面临一个问题。任何时候,生成的代码都会使引用无效。
给定两个具有关系 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 当前为空)。
有没有办法避免这种行为?
提前感谢您的回答;