【发布时间】:2020-02-13 01:33:34
【问题描述】:
我有一个类似的模型
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 属性?将其设置为键不是一个选项,我有几十个表是 FK 到 GUID 属性的,这是有充分理由的。
编辑:我发现包https://entityframework-extensions.net/ 正在处理我的保存更改。如果我使用标准的 EF savechanges 它可以工作,但不能使用扩展版本。
【问题讨论】:
-
我无法重现此行为 /w EF6.我创建了一个带有 GUID PK 的表,既使用 DB 默认值,又在代码中设置 PK,以及 Identity 辅助非键字段,将实体插入到 Context DbSet 中,并且在 SaveChanges 之后,Identity 值可用。您能否扩展您的代码以准确显示您是如何填充和保存该实体的?
-
好吧,我挖得更深一点,发现在我的应用程序的存储库层中有一个名为 entityframework-extensions.net 的框架正在处理批量操作的保存更改,并且单个项目也被推送通过批量保存更改方法。如果我切换到常规的 EF saveChanges,它会按照您的描述工作,但使用扩展程序,它就像在我的场景中一样工作。
标签: entity-framework entity-framework-6 entity-framework-extensions