ng重复覆盖值导致Breeze(来自EF)提供的关键字段相同

ng重复覆盖值导致Breeze(来自EF)提供的关键字段相同,breeze,angularjs-ng-repeat,Breeze,Angularjs Ng Repeat,我有一个遗留数据库,其中行之间的键可能相同。中继器应显示的其他数据不相同。数据库是EF映射的(键字段标记为键),Breeze用于将数据从EF传递到Angluar。中继器显示的行似乎被来自具有相同键的后一行的数据覆盖 这是Breeze从api检索的Json类型: { "$id": "1", "$type": "Breeze.WebApi2.QueryResult, Breeze.WebApi2", "Results": [ { "$id": "2", "

我有一个遗留数据库,其中行之间的键可能相同。中继器应显示的其他数据不相同。数据库是EF映射的(键字段标记为键),Breeze用于将数据从EF传递到Angluar。中继器显示的行似乎被来自具有相同键的后一行的数据覆盖

这是Breeze从api检索的Json类型:

{
  "$id": "1",
  "$type": "Breeze.WebApi2.QueryResult, Breeze.WebApi2",
  "Results": [
    {
      "$id": "2",
      "$type": "_I...lade",
      "Key1": "11",
      "Key2": "22",
      "text1": 1.0,
      "text2": "00000000032800134220",
      "text3": 15.00
    },
    {
      "$id": "3",
      "$type": "_I...lade",
      "Key1": "11",
      "Key2": "22",
      "text1": 2.0,
      "text2": "00000000044800102213",
      "text3": 5.00
    },
    {
      "$id": "4",
      "$type": "_I...lade",
      "Key1": "11",
      "Key2": "22",
      "text1": 12.0,
      "text2": "000000000512002321",
      "text3": 33.00
    }
  ],
  "InlineCount": 3
}
我试图显示文本*-字段中的数据,但Angular(或Breeze)似乎意识到键*-字段具有相同的值,然后在每一行ng repeat显示第三个(最后一个)结果集的值

美元索引仍然可以在每一行上很好地打印

ng-repeat="a in vm.data track by $index" 
我尝试通过这种方式使用ng repeat来利用上面看到的Breeze的$id属性:

ng-repeat="a in vm.data track by $id($id)"
或 ng repeat=“a在vm.data中按$id跟踪(a.$id)”

但是Angular给出了被复制者的错误:

[ngRepeat:dupes]中继器中不允许重复。使用“轨迹” 通过表达式指定唯一键

而且,如果我告诉EF它为Breeze提供的所有字段都是键,那么一切都开始正常工作。我认为这只是因为到目前为止,并不是所有的字段都是相同的


有没有可能使这项工作在前端风或角?也许可以使用Breeze提供的$id,它在每一行上都是唯一的?

不确定您的旧数据库是什么,以及它如何容纳具有非唯一键的记录。在EF中,除非某个属性(或属性组合)是唯一的,否则不能将其指定为键。在Breeze中,每个实体都必须具有唯一的主键

也就是说,Breeze很乐意从服务器返回未设置密钥的数据。这些数据不是实体,也不是缓存数据。但它们是从查询返回的。投影查询就是一个典型的例子

微风在这里无关紧要。Angular的
ng repeat
给出了错误,因为(我认为)您正在使用一个基本JavaScript值进行迭代

我本以为,
ng repeat=“a in vm.data track by$index”
会让您摆脱困境。不是吗?这怎么可能?您必须向我展示实际失败的ngRepeat(以及
vm.data
的值),让我相信它


最后,Breeze返回的数据中没有
$id
。您在连线上看到的
$id
是一个序列化工件,当Breeze将JSON返回给您时,它就会消失。您尝试通过它(或它的任何派生项)跟踪失败,并出现ng dupes错误,因为
anything.$id
的值始终相同:
undefined

存在相同键的EF实体是一个联合定义查询,其行与键相同。这种情况导致ngRepeat覆盖具有相同键的行的非键字段,即使使用track by$index。现在可以通过在联合中定义查询并将其标记为旧查询的键来处理这个问题。现在ngRepeat有单独的键值,并且似乎工作正常。谢谢你的回答,它为我清除了一些方面:)