Breeze问题:null复杂类型设置为新的空对象

时间:2014-07-28 12:11:14

标签: c# breeze asp.net-apicontroller

我在Durandal-project工作并使用Breeze对象。

我有一个包含一些复杂类型的breeze模型。

在服务器端,我将一些复杂类型属性设置为null。

但是,当对象到达客户端时,我设置为null的复杂类型包含对复杂类型对象的referance。 我需要它们为空。

我的主要模特模式:

     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#,使用apiController):

      if (!EnablJobsData)
                employeeData.employeeJobsData = null;

我希望在条件为真时,所以在客户端employeeData.employeeJobsData() - 返回 null 。 现状,它返回微风复杂实体。

谢谢!

1 个答案:

答案 0 :(得分:1)

现在所有标量 breeze复杂对象属性都被视为不可为空的值类型。做出这个决定,以便对复杂对象上的子属性的查询不必涉及特殊的空检查逻辑。即,以便我们可以使用这样的表达式:

myCustomer.address.city == 'Los Angeles";

而不是

myCustomer.address != null && myCustomer.address.city == 'Los Angeles';

显然,对于更深层嵌套的复杂对象属性,这种表达式会变得更加丑陋。

内部处理的方式是每个复杂对象都有一个'null'版本,它只是复杂的对象,其 all 的属性设置为默认值或空值。此null版本是任何未分配的复杂对象属性的默认值。

因此,如果要检测“null”复杂对象,只需添加一个检查此条件的方法即可。

请注意,对于返回复杂对象数组的属性,这不是问题。在这种情况下,空数组是有效的构造。