Breeze 返回的数据中“\u1”之后的部分是PascalCase,尽管我将camelCase设置为默认命名约定

Breeze 返回的数据中“\u1”之后的部分是PascalCase,尽管我将camelCase设置为默认命名约定,breeze,Breeze,在创建实体经理之前,我有以下代码行: breeze.NamingConvention.camelCase.setAsDefault 此查询: var query = entityQuery.from('vehicle') .expand("engine, driveType") .select("engine.friendlyEngineName, driveType.friendlyDrivetrain") 数据是这样返回的:

在创建实体经理之前,我有以下代码行:

breeze.NamingConvention.camelCase.setAsDefault

此查询:

var query = entityQuery.from('vehicle')
                .expand("engine, driveType")
                .select("engine.friendlyEngineName, driveType.friendlyDrivetrain")
数据是这样返回的:

driveType_FriendlyDriveTrain = "Rear Wheel"
engine_FriendlyEngineName = "6.2L V8"
为什么FriendlyDriveTrain和FriendlyEngineeName是PascalCase?这显然是错误的,因为我在创建EntityManager和查询之前设置了camelCase。我如何使“u”后面的部分也是camelCase

注意:我确保删除任何WebAPI json格式配置,这样breeze是唯一一个管理翻译的

编辑:奇怪的是,这个查询返回的属性在命中缓存时以“\u1”开头。相同的查询,两个不同的结果。

请查看。如果这还不清楚,你可以回来问一个更具体的问题。谢谢

编辑2014年9月2日上午 还请解释一下你认为Breeze应该如何处理这个角色。Breeze约定将其视为任何其他标识符字符,例如a-z、a-z、0-9,并且对其不做任何处理。似乎您希望您的约定跳过前导下划线,并降低其后第一个字符的大小写(如果是alpha)。我想你也应该去掉下划线。。。但我不确定

那很酷。您可以编写自己的NamingConvention来满足您的需求。您也可以将其设为默认值。事实上,NamingConvention文档页面上显示的noUnderscoreConvention对您来说已经有一半了

我要说的是,您在select语句和返回的数据中混合了句点和下划线,这使我陷入了一个循环。我不知道你是如何让select工作的,或者是如何得到这样的结果的

2014年9月2日下午编辑 好的。。。我忽略了你正在做投影的事实

无论是ComplexType还是EntityType导航,投影都会展平虚线属性路径值。它使用u作为分隔符,为这些展开的特性创建投影特性名称。是的,它将适用的元数据存储的命名约定应用于那些分隔的名称,是的,case约定对下划线没有任何特殊作用。因此,您可以返回平坦的投影属性名称,例如engine_FriendlyEngineName

如果你愿意,你可以称之为bug。我不。我不这么认为,因为在我看来,卡梅尔案公约在这种情况下应该怎么做是一个意见问题;b永远都是这样;我不认为冒着破坏可能依赖当前行为的现有应用程序的风险是足够重要的。。。当你的治疗方法如此简单的时候

补救办法是编写您自己的camelCase约定,以不同的方式处理这些投影属性名称

请在撰写时将其包含在此处,以便与您观点相同的其他人可以从中受益

我不确定您在编写时的意思:这个查询返回的属性在命中缓存时以“\u1”开头。这是什么疑问?不是你在这里写的那个


投影结果未命中缓存。。。除非投影属性值本身是一个实体。。。但事实并非如此。你说的这个问题是什么意思。我在等待您的回复。

这与knockout.js有什么关系?我阅读了文档,其中没有提到返回数据中“\u1”后面的部分。我更新了我的问题,使之更加具体。我们的数据模型中没有一个属性带有下划线。breeze正在添加下划线。当我们选择复杂类型,即engine.friendlyEngineName时,它会创建一个带有下划线的属性。