【问题标题】:Breeze issue: null complex type is set to a new empty objectBreeze 问题:null 复杂类型设置为新的空对象
【发布时间】:2014-07-30 04:02:52
【问题描述】:

我在 Durandal 项目中工作并使用 Breeze 对象。

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

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

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

我的主要模型模式:

     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。 实际上,它返回的是微风复杂实体。

谢谢!

【问题讨论】:

    标签: c# breeze asp.net-apicontroller


    【解决方案1】:

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

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

    而不是

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

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

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

    因此,如果您想检测“空”复杂对象,您可以简单地添加一个检查此条件的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多