Entity framework 如何处理一对多关系淘汰实体框架
所以我有一个简单的结构,一次购买有一个费用集合,每个费用有一个账户(塑料、现金、塑料#2…) 因此,我的api得到的json与此类似: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":
[
{"$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; }
<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>