You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Breeze.Persistence.EFCore执行INSERT操作时遇主键NULL错误

Breeze.Persistence.EFCore 保存Guid主键新实体时出现NULL插入错误的解决方法

问题现象

保存新实体时触发数据库错误:

无法将值NULL插入列'id',表'dbo.Clients';列不允许空值。INSERT失败。

环境与前置信息

  • 问题仅出现在新实体保存场景,UPDATE、DELETE操作正常
  • 实体Id为Guid数据类型,已显式标记[Key]特性
  • 客户端breeze.js已自动生成Id,且确认该值已成功传输到服务器

排查过程

验证服务器端接收的实体Id存在有效值,但调试Breeze.Persistence.EFCore的HandleAdded()方法(含// HACK注释)时发现:IsTemporary属性被设为true,但RealValue仍为null,推测是Breeze与EF Core的配置兼容性问题。

无效尝试

  • 升级Breeze.Persistence.EFCore至v7.2.1稳定版,问题未解决
  • 尝试在保存前手动设置Id,重写BeforeEntitySave()方法赋值仍失败

最终解决方案

修改客户端breeze.js配置,将目标实体的AutoGeneratedKeyType设为None,阻止客户端自动生成Id,改为在服务器端通过BeforeEntitySave()方法生成并设置Id。代码示例:

import * as breeze from 'breeze-client';

let manager = new breeze.EntityManager(this.serviceUrl);
manager.fetchMetadata().then(() => {
  register(manager.metadataStore);
});

function extend(store: breeze.MetadataStore) {
  store.getAsEntityType("Client")
    .setProperties({ autoGeneratedKeyType: breeze.AutoGeneratedKeyType.None });
}

设置完成后,新实体保存时不再出现Id为NULL的插入错误,问题解决。后续计划在GitHub提交相关issue反馈该问题。


内容的提问来源于stack exchange,提问作者Nozim Turakulov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:26:08