首页 > 解决方案 > Breeze - 当 PK 是自动生成的 ID 时无法创建实体

问题描述

当表的 PK 是用户输入的值时,我已经使用过几次微风的 CreateEntity。当 PK 是 IDENTITY 时,使用 SQL SERVER 有几次。当 PK 是 ORACLE 中自动生成的 ID(实际上是“序列”)时,这是我第一次尝试这样做。它不工作。

我首先检查以确保我已获取元数据,然后创建新的空实体,该实体将由用户填充值。

我的 createEntity 代码(newEntity 是可淘汰的 Observable):

function createEntity(newEntity) {
    newEntity(manager.createEntity(entityNames.escctransactions, {}));   <<<<< this fails
    return;
}

错误:无法将类型的对象 (ESCC_TRANSACTIONS:...) 附加到 EntityManager,而无需先设置其键或将其 entityType 'AutoGeneratedKeyType' 属性设置为 'None' 以外的其他值

我知道我需要将 AutoGeneratedKeyType 设置为“Identity”,但不知道该怎么做。当我初始化元数据时尝试了这个,但仍然得到同样的错误,所以它显然不起作用:

   var entyType = manager.metadataStore.getEntityType("ESCC_TRANSACTIONS");
   entyType.setProperties({ AutoGeneratedKeyType: AutoGeneratedKeyType.Identity });

我见过一些关于在构造函数中做的事情,但我从未在 JavaScript 中使用过构造函数。还有关于在配置中更改它的东西吗?

使用 Breeze 1.6、Knockout.js 3.4、.NET 4.5.2 框架

谢谢

标签: oracleknockout.jsentity-framework-6single-page-applicationbreeze

解决方案


我自己想通了,现在可以工作了。设置 AutoGeneratedKeyType 的代码如下:

var entityType = manager.metadataStore.getEntityType("ESCC_TRANSACTIONS");
entityType.autoGeneratedKeyType = "Identity";

或者这有效:

var entityType = manager.metadataStore.getEntityType("ESCC_TRANSACTIONS");
entityType.autoGeneratedKeyType = breeze.AutoGeneratedKeyType.Identity;

尽管此处有 AutoGeneratedKeyType 的 Breeze 文档:http: //breeze.github.io/doc-js/api-docs/classes/AutoGeneratedKeyType.html,但它不是 Auto 中的大写“A”,而是一个小的“a ”。


推荐阅读