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

Entity Framework测试中手动设置的实体GUID在创建时被覆盖问题

问题根本原因

导致你手动设置的Guid主键被覆盖主要有两个核心错误:

  • EF Core默认对Guid类型主键开启了自动值生成策略,手动赋值会被默认生成的新值覆盖
  • AppRoles导航属性的外键配置错误,可能会干扰主键值的正常写入

修复步骤

  1. 显式关闭主键的自动值生成
    在你的上下文配置代码中,针对Users实体的配置块添加属性配置,声明主键值由你手动提供:
builder.Entity<Users>(a =>
{
    a.HasKey(a => a.Id);
    // 新增这一行,关闭Id的自动生成逻辑
    a.Property(p => p.Id).ValueGeneratedNever();
    a.HasOne(b => b.Organization)
    .WithMany(b => b.Users);
    a.HasMany<UserOrganizations>(c => c.UserOrganizations);
    a.HasOne(b => b.AppRoles);
});
  1. 修正AppRoles的外键配置
    你当前在Users实体中给AppRoles加的[ForeignKey("Id")]注解是错误的,该配置表示用Users自己的主键Id作为关联UserRequestRoles表的外键,会干扰主键的赋值逻辑。
    你需要在Users实体中新增独立的外键字段,再绑定外键关系:
public class Users
{
    [Key]
    [Column("Id")]
    public Guid Id { get; set; }

    // 其他原有字段省略...

    // 新增外键字段
    public Guid AppRolesId { get; set; }
    // 修正外键注解,绑定到新增的外键字段
    [ForeignKey(nameof(AppRolesId))]
    public virtual UserRequestRoles AppRoles { get; set; }

    // 其他导航属性省略...
}

如果你确实需要用共享主键的一对一关联,也需要在上下文配置中显式声明关联逻辑,避免默认规则干扰主键赋值。


验证

修改完成后重新执行种子代码,SaveChanges后查询Users实体的Id,即可看到你手动设置的3859e4c1-aaf7-4d9b-bc5e-8730ae9ad531已经被正常写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:15:00