掌握微风错误客户端:“不能调用方法‘地图’的未定义”试图拉过来一些数据时。这个动作和一个有效的区别在于,这个动作调用一个存储过程并返回ObjectResult<T>
而不是DbSet<T>
。错误,以及调用存储过程
也许这是为什么我得到一个错误?使用Chrome开发人员工具,我确实看到breeze控制器正在返回json数据。
我已经建立在EDMX一个复杂的模型类型映射从存储过程返回的行。
在微风中控制器的操作具有IEnumerable<T>
返回类型。
掌握微风错误客户端:“不能调用方法‘地图’的未定义”试图拉过来一些数据时。这个动作和一个有效的区别在于,这个动作调用一个存储过程并返回ObjectResult<T>
而不是DbSet<T>
。错误,以及调用存储过程
也许这是为什么我得到一个错误?使用Chrome开发人员工具,我确实看到breeze控制器正在返回json数据。
我已经建立在EDMX一个复杂的模型类型映射从存储过程返回的行。
在微风中控制器的操作具有IEnumerable<T>
返回类型。
嗯......不太清楚发生了什么,所以只是猜测这里,但尝试添加一个AsQueryable()到返回的结果,并将结果类型更改为IQueryable。
我们没有对任何微风存储过程的测试还没有,但是这是推动我补充一些:)
我使用EF复杂类型时经历了同样的错误。解决方法是在我的数据库中创建视图而不是使用复杂类型,将存储过程设置为返回具有主键的新视图的类型,然后运行。看起来微风需要实体具有定义的主键。
我有同样的问题,但感谢上帝,我想出了一个解决方案。您应该使用视图,而不是使用存储过程,因为Breeze将视图识别为DbSet<T>
,就像表一样。假设你有一个包含两个Customers和Orders表的SQL服务器表。
Customers (**CustomerId**, FirstName, LastName)
Orders (OrderId, #CustomerId, OrderDate, OrderTotal)
现在,假设你想通过客户ID返回订单的查询。通常,你会在存储过程中这样做,但正如我所说的,你需要使用一个视图。所以查询在视图中看起来像这样。
Select o.OrderId, c.CustomerId, o.OrderDate, o.OrderTotal
from dbo.Orders o inner join dbo.Customers c on c.CustomerId = o.CustomerId
注意没有过滤(其中...)。所以:
我。创建一个[一般]视图,其包括过滤键(一个或多个),并将其命名,说,OrdersByCustomers
II。添加在你的VS项目
III的OrdersByCustomers以实体模型。实体添加到微风控制器,因为这样的:
public IQueryable<OrdersByCustomers> OrdersByCustomerId(int id)
{
return _contextProvider.Context.OrdersByCustomers
.Where(r => r.CustomerId == id);
}
通知的。凡(R => r.CustomerId == ID)滤波器。我们可以在数据服务文件中执行此操作,但因为我们希望用户只能看到他的个人数据,所以我们需要从服务器进行过滤,以便仅返回其数据。
IV。现在,该实体在控制器中设置,你可以调用它在数据服务文件,因为这样的:
var getOrdersByCustomerId = function(orderObservable, id)
{
var query = breeze.EntityQuery.from('OrdersByCustomerId')
.WithParameters({ CustomerId: id });
return manager.executeQuery(query)
.then(function(data) {
if (orderObservable) orderObservable(data.results);
}
.fail(function(e) {
logError('Retrieve Data Failed');
}
}
v您可能知道从这里下一步要做什么。
希望它有帮助。
试过AsQueryable()但没有解决问题。 json的数据很好。假设问题是将数据映射到元数据?如果edmx是不同命名空间/项目的一部分,会不会有问题? – Wavel
这是否有帮助:breeze.debug.js行3818 entityType.keyProperties.map(...),keyProperties未定义。 rawEntity中有很好的数据,entityType也很好看。 – Wavel
是的,这有帮助。 Breeze需要为每个entityType定义的关键属性或属性。为了使entityManager能够合并实体,这是必需的。我的猜测是,这个entityType的Edmx没有定义一个键。我没有看EF存储过程一段时间,但我似乎想起了一些方法来告诉EF什么样的结果列构成了一个关键。如果没有,让我知道,我们会想出另一个想法。我还会确保我们将来为这种情况抛出更有意义的错误信息。 –