0

嗨,我正在尝试让 Breeze 创建元数据存储,但消息失败 NamingConvention for this server property name does not roundtrip properly

我与开箱即用的 Web API 具有相同的自引用循环,并且能够解决但设置 json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore

任何帮助或解决方案将不胜感激。

谢谢

4

3 回答 3

1

好的,所以我解决了我自己的问题。我的表名都以小写字母开头,所以当我收到往返错误时,这是​​因为它会查看诸如 refLookup 之类的实体,Breeze 将其视为 RefLookup,但也将实体引用为 refLookup(没有驼峰式大小写为那是实体的名称)。所以我只是用大写字符命名了数据库中的所有表。希望对将来的某个人有所帮助。

于 2013-07-04T10:15:59.210 回答
0

BreezeNamingConvention工具支持属性别名,而不是实体类型名称别名。因此,实体类型名称的拼写必须与服务器端类型名称完全匹配……即使您选择 camelCasing NamingConvention 或创建自己的自定义NamingConvention插件。

这就是为什么我对您对表/实体类名称大小写有任何困难感到惊讶的原因。

我无法重现此错误。这是我尝试过的

  • 在我的数据库中添加了一个“foo”表
  • 创建了对应的foo
  • 将其作为foos查询操作方法从 Web API 控制器公开
  • 在微风客户端上查询所有foos

Breeze 客户端可以轻松返回我的(两个)foo实体。

请注意,我并没有试图弄乱NamingConvention客户端。我保留了默认值……即每个客户端实体属性名称与其对应的服务器属性名称相同。正如我所说,NamingConvention它对实体类型名称没有任何作用,并且元数据中没有表示服务器和客户端实体类型名称之间的差异。

你不这么认为吗?你能提供一个样品吗?

强烈的警告不要更改 Json.NET 属性命名约定。所有名称别名必须由客户端上的 Breeze 完成。

[BreezeController]通常,如果属性设置了该值,则不应更改 Json.NET 配置设置。我能想到的唯一例外是空值处理;Breeze 告诉 Json.NET 忽略空值。我认为这是一个错误......如果你愿意,你可以告诉 Json.NET 发送空值。

于 2013-07-05T02:59:03.383 回答
0

使用两个经理时我遇到了同样的问题。我发现如果你使用全局

breeze.NamingConvention.{whateverYouUse}.setAsDefault();

它需要在创建管理器之前设置。此外,如果您强制将 json 序列化为服务器上的特定命名约定,则客户端上的命名约定应该匹配。我正在使用微风上下文,只要它在管理器之前的设置都按计划工作..也许你不需要服务器端设置?

于 2013-07-03T14:47:42.997 回答