2014-07-09 9 views
0

我从Breeze WebApi返回的JSON结果没有正确地分配给挖空observable当图的根中的实体先前存在为子实体。带有扩展子实体的微风entityquery没有正确地分配给knockout可观察数组

我有一个具有1个或多个租户实体用户和租户可以有一个或多个用户(多对多的关系)

当运行一个查询我得到以下JSON结果(我只秀相关部分):

{ "$id": "1", 
    "$type": "Imp.Tenant, Imp", 
    "TenantId": "14ff1ad0-6807-e411-befb-2c41384f9e84", 
    "Users": [{ 
      "$id": "2", 
      "$type": "Imp.User, Imp", 
      "UserId": "d38a68c2-4407-e411-befb-2c41384f9e84", 
      "Firstname": "Richard", 
      "Tenants": [{ 
        "$ref": "1" 
       },{ 
        "$id": "3", 
        "$type": "Imp.Tenant, Imp", 
        "TenantId": "5c8d8852-6907-e411-befb-2c41384f9e84", 
        "Users": [{ 
          "$ref": "2" 
         } 
        ], 
       } 
      ], 
      "CurrentTenant": { 
       "$ref": "1" 
      }, 
      "CurrentTenantId": "14ff1ad0-6807-e411-befb-2c41384f9e84", 
     } 
    ], 
    "CreatedBy": { 
     "$ref": "2" 
    }, 
    "CreatedById": "d38a68c2-4407-e411-befb-2c41384f9e84" 
},{ 
    "$ref": "3" 
} 

我运行以下查询(打字稿代码):

var query = breeze.EntityQuery 
      .from("userTenants") 
      .withParameters({ userId: userId }); 

return query 
      .using(this.BreezeEntityManager) 
      .execute() 
      .then((data) => this.Tenants(<Imp.Tenant[]>data.results)) 

,微风控制器看起来是这样的:

public IQueryable<Tenant> userTenants(Guid userId) 
    {     
     var User = _ContextProvider.Context.Users 
      .Include("Tenants") 
      .FirstOrDefault(x => x.UserId == userId); 
     return User.Tenants.AsQueryable(); 
    } 

似乎因为实体$ REF 1(ID “14ff1ad0-6807-E411-befb-2c41384f9e84”)也是从用户子实体它得到在JSON的端部称为$ REF 3串。

当试图分配该值的knockoutObservableArray,只有第一个租户实体正确分配,但第二个($ REF 3)获得一个功能在监视窗口中显示:

function(){ 
    return mc.refMap[nodeRefId]; 
} 

哪有我检索用户链接到的所有租户?

+0

对不起,我不能repro你的问题。您可以创建一个简单的repro解决方案并将其发送到[email protected]? –

+0

是租户给用户一个多对多的关系吗? –

+0

@PW卡德是的,用户的租户是多对多的。 – RHAD

回答

1

对于它的价值,我想我只是解决了同样的问题。根本原因似乎是,我的多对一导航属性之一,使用EF的默认约定,没有出现一个参考约束。导航属性在客户端被默默忽略。

在我的情况下,JSON编码后来引用的对象(即通过$ ref)第一次出现在这个被忽略的属性中,所以没有被添加到映射上下文中。尽管我可能没有在导航属性的上下文中关心该对象,但我确实将它作为原始查询结果中出现的根级对象。

解决方法是映射基础外键约束。

相关问题