微风-当PK是自动生成的ID时,无法创建实体

时间:2018-09-02 04:13:37

标签: oracle knockout.js entity-framework-6 single-page-application breeze

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

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

我创建createEntity的代码(newEntity是可观察到的基因剔除):

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

错误: 无法将类型(ESCC_TRANSACTIONS:...)的对象附加到EntityManager,除非先设置其键或将其objectType的“ AutoGeneratedKeyType”属性设置为“无”以外的其他值

我知道我需要将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框架

谢谢

1 个答案:

答案 0 :(得分:1)

我自己弄清楚了,它现在正在工作。设置AutoGeneratedKeyType的代码如下:

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

这可行:

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

尽管这里有有关Breeze的AutoGeneratedKeyType文档: http://breeze.github.io/doc-js/api-docs/classes/AutoGeneratedKeyType.html,不是Auto中的大写字母“ A”,而是小写的“ a”。