Breeze实体密钥未在创建时设置

时间:2014-01-03 20:13:07

标签: c# javascript breeze durandal-2.0

我有以下创建产品对象的JS脚本:

var entityQuery = breeze.EntityQuery,
        manager = configureBreezeManager();
function configureBreezeManager() {
    breeze.NamingConvention.camelCase.setAsDefault();
    return new breeze.EntityManager(config.remoteServiceName);;
}
...
var createProduct = function () {
    var product = manager.createEntity('Product', { name: '', description: ''});
    return product;
};

和服务器后端:

public class Product{
    int ProductId{get;set;}
    String Name{get;set;}
    String Description{get;set;}
}

问题是product的密钥在创建时始终为-1。通过id(-1)在本地尝试产品会返回一个空结果。

如何创建实体并在需要时能够将其恢复(无需先将实体保存到服务器中)?

1 个答案:

答案 0 :(得分:1)

我不完全确定我理解这个问题。但是当您调用 EntityManager.createEntity 时,将创建实体并将其添加到EntityManager的缓存中。

这意味着当您调用 EntityManager.getEntities 时,您将找到该实体,或者当您通过 EntityManager.executeQueryLocally 运行本地缓存查询或使用FetchStrategy查询时FetchStrategy.FromLocalCache你也会找到实体。

在执行保存之前,实体不会出现在服务器上,此时本地实体将从临时密钥更改为永久密钥。有关详细信息,请参阅此页面上的“临时密钥生成”主题:http://www.breezejs.com/documentation/extending-entities