首页 > 解决方案 > 实体框架 - 如果它不是实体的键,则保存后不会填充数据库生成的标识

问题描述

我有一个模型

public class MyEntity
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Required]
    public int Id { get; set; } // Id

    [Required]
    [Key]
    public System.Guid GUID { get; set; }
}

GUID 属性是设计上的 PK,但我有一个 db 生成的 Id 属性,我在代码中使用它来确定对象是否是尚未保存的新对象。

当我使用 Entity Framework 保存此对象时,Id 属性不会像数据库生成的属性通常发生的那样重新填充(尽管通常这些是键)。我必须在数据库中查询对象并手动获取 ID。似乎 EF 只返回填充 SaveChanges 上的 Key 属性。

有什么方法可以让 EF 在这里自动填充 Id 属性?将其设置为键不是一个选项,我有几十个表是对 GUID 属性进行 FK 的,这是有充分理由的。

编辑:我发现包https://entityframework-extensions.net/正在处理我的保存更改。如果我使用标准的 EF savechanges 它可以工作,但不能使用扩展版本。

标签: entity-frameworkentity-framework-6entity-framework-extensions

解决方案


免责声明:我是实体框架扩展的所有者

这确实是我们图书馆的一个问题。EF6 尚不支持此方案。

但是,从 v4.0.50 开始,它现在应该可以按预期工作了。


推荐阅读