微风问题:null复杂类型被设置为一个新的空对象
本文关键字:一个 对象 null 问题 复杂 类型 设置 微风 | 更新日期: 2023-09-27 18:15:08
我在Durandal-project中工作,使用Breeze对象。
我有一个包含一些复杂类型的微风模型。
在服务器端,我将一些复杂类型的属性设置为null。
但是,当对象到达客户端时,我设置为null的复杂类型包含对复杂类型对象的引用。我需要它们为空
my main model pattern:
function addEmployeeType(store) {
store.addEntityType({
shortName: "EmployeeDTO",
namespace: "myServer.Entities",
autoGeneratedKeyType: AutoGeneratedKeyType.Identity,
dataProperties: {
Emp_no1: { dataType: DataType.Int32, isNullable: false, isPartOfKey: true },
employeeBaseData: {
name: "employeeBaseData",
complexTypeName: "EmployeeBaseDTO:#myServer.Entities",
isNullable: false,
isPartOfKey: false
},
employeeTblData: {
name: "employeeTblData",
complexTypeName: "EmployeeTblDTO:#myServer.Entities",
isNullable: false
},
employeePersonalDetails: {
name: "employeePersonalDetails",
complexTypeName: "EmployeePersonalDetailsDTO:#myServer.Entities",
isNullable: true
},
employeeContacts: {
name: "EmployeeJobsDTO",
complexTypeName: "EmployeeJobsDTO:#myServer.Entities",
isNullable: true
}
}
});
store.registerEntityTypeCtor("EmployeeDTO", null, employeeInit);
}
服务器端代码 (c#, using apiController):
if (!EnablJobsData)
employeeData.employeeJobsData = null;
我希望当条件为真时,因此在客户端employeeData.employeeJobsData() -返回null。实际上,它返回微风复杂实体。
谢谢!
现在所有标量微风复杂对象属性都被视为不可空值类型。这样做是为了在复杂对象上查询子属性时不必涉及特殊的空检查逻辑。也就是说,我们可以使用这样的表达式:
myCustomer.address.city == 'Los Angeles";
代替
myCustomer.address != null && myCustomer.address.city == 'Los Angeles';
显然,对于嵌套更深的复杂对象属性,这种表达式会变得更加难看。
内部处理的方式是,每个复杂对象都有一个'null'版本,即复杂对象的所有属性设置为默认值或null值。此空版本是任何未分配的复杂对象属性的默认值。
所以如果你想检测一个'null'复杂对象,你可以简单地添加一个方法来检查这个条件。
注意,对于返回复杂对象数组的属性,这不是问题。在这种情况下,空数组是有效的结构。