Breeze Web API Round Trip问题

时间:2013-07-03 09:47:06

标签: asp.net-web-api breeze

您好我正在尝试让Breeze创建一个元数据存储,但它失败了     NamingConvention for this server property name does not roundtrip properly

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

非常感谢任何帮助或解决方案。

由于

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

好的,所以我解决了自己的问题。我的表名都是以小写字母开头的,所以当我得到往返错误时,这是​​因为它会查看一个实体,例如refLookup,它被Breeze视为RefLookup,但也被引用为一个实体作为refLookup(没有骆驼案例为这就是实体的名称)。所以我只是用大写字符命名数据库中的所有表。希望将来有所帮助。

答案 2 :(得分:0)

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

这就是为什么我对表/实体类名称包装有任何困难感到惊讶。

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

  • 在我的数据库中添加了'foo'表格
  • 创建了相应的foo
  • 将其作为foos查询操作方法从Web API控制器公开
  • 在Breeze客户端上查询所有foos

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

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

你认为不是吗?你能提供样品吗?

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

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