Entity framework 如何处理一对多关系淘汰实体框架

Entity framework 如何处理一对多关系淘汰实体框架,entity-framework,knockout.js,Entity Framework,Knockout.js,所以我有一个简单的结构,一次购买有一个费用集合,每个费用有一个账户(塑料、现金、塑料#2…) 因此,我的api得到的json与此类似: [ {"$id":"1","Id":1,"Name":"apple","Value":100.0,"AccountId":1,"Account": {"$id":"2","Id":1,"Name":"Cash"}}, {"$id":"3","Id":2,"Name":"pear","Value":50.0,"AccountId":1,"Account":

所以我有一个简单的结构,一次购买有一个费用集合,每个费用有一个账户(塑料、现金、塑料#2…)

因此,我的api得到的json与此类似:

[
{"$id":"1","Id":1,"Name":"apple","Value":100.0,"AccountId":1,"Account":
    {"$id":"2","Id":1,"Name":"Cash"}},
{"$id":"3","Id":2,"Name":"pear","Value":50.0,"AccountId":1,"Account":
    {"$ref":"2"}},
{"$id":"4","Id":3,"Name":"raspberry","Value":10.0,"AccountId":1,"Account":
    {"$ref":"2"}}
]
我看到我的json并不是每次需要的时候都在写我的现金账户,而是在引用它

 {"$ref":"2"}
在哪里

因此,当我使用此html呈现表格时:

<table>
<tbody data-bind="foreach: gastos">
    <tr>
        <td data-bind="text: $data.id"></td>
        <td data-bind="text: $data.name"></td>
        <td data-bind="text: $data.value"></td>
        <td data-bind="text: $data.account.Name"></td>
        <td>
            <button type="button" class="btn btn-xs">
                <i class="glyphicon glyphicon-trash"></i>
            </button>
        </td>
    </tr>
</tbody>
</table>

谢谢。

我不熟悉
实体框架
,但对于提供的数据,有几个选项可用():

  • gastos
    旁边建立帐户信息。并且仅提供
    $id
    $ref
    供以后参考

    var vm = {
      gastos: [],
    
      accounts: {},
      accountLookup: function(accountId){
         return this.accounts[accountId];
      }
    }
    
    //... inside AJAX call
    var accountId = o.Account["$id"]
    if(accountId)
    {
      vm.accounts[accountId] = o.Account;
    }
    
  • 使用从阵列中查找帐户

    accountLookupByUtil: function(accountId) {
    
        var gasto =  ko.utils.arrayFirst(this.gastos, function(item) {
          if(item.account['$id'] == accountId)
          {
            return item
          }             
        });
    
       return gasto.account;
    }
    
从html:

<td data-bind="text: $root.accountLookup($data.accountId).Name"></td>
<td data-bind="text: $root.accountLookupByUtil($data.accountId).Name"></td>


注意:这两种方法在fiddle中都可用,因此根据使用的方法,提供了一些不必要的属性。

如果要使帐户可见,如何处理?编辑,第二个选项将起作用,无需担心
accountLookupByUtil: function(accountId) {

    var gasto =  ko.utils.arrayFirst(this.gastos, function(item) {
      if(item.account['$id'] == accountId)
      {
        return item
      }             
    });

   return gasto.account;
}
<td data-bind="text: $root.accountLookup($data.accountId).Name"></td>
<td data-bind="text: $root.accountLookupByUtil($data.accountId).Name"></td>