Breeze - 当 PK 是自动生成的 ID 时无法创建实体
Posted
技术标签:
【中文标题】Breeze - 当 PK 是自动生成的 ID 时无法创建实体【英文标题】:Breeze - Can't Create Entity when PK is an autogenerated ID 【发布时间】:2019-02-07 13:50:25 【问题描述】:当表的 PK 是用户输入的值时,我已经使用过几次轻量级的 CreateEntity。当 PK 是 IDENTITY 时,使用 SQL SERVER 有几次。当 PK 是 ORACLE 中自动生成的 ID(实际上是“序列”)时,这是我第一次尝试这样做。它不工作。
我首先检查以确保我已获取元数据,然后创建新的空实体,该实体将由用户填充值。
我的 createEntity 代码(newEntity 是可淘汰的 Observable):
function createEntity(newEntity)
newEntity(manager.createEntity(entityNames.escctransactions, )); <<<<< this fails
return;
错误: 如果不先设置其键或将其 entityType 'AutoGeneratedKeyType' 属性设置为 'None' 以外的值,则无法将 (ESCC_TRANSACTIONS:...) 类型的对象附加到 EntityManager
我知道我需要将 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】:我自己想通了,它现在可以工作了。设置 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”。
【讨论】:
以上是关于Breeze - 当 PK 是自动生成的 ID 时无法创建实体的主要内容,如果未能解决你的问题,请参考以下文章
Breeze executeQuery Q 承诺失败 CORS