Tho*_*mas 1 .net sql-server entity-framework
我有一个首先生成数据库的实体框架上下文。我正在添加一个带有将由数据库生成的 GUID PK 的表。当我从数据库生成 EDMX 模型时,它将 StoreGeneratePattern 设置为“None”。
我需要手动将应用程序的 StoreGeneratePattern 更改为“Identity”,以便让数据库创建 ID。
有没有办法确保 EDMX 自动正确设置该值?
在Entity Framework 6中就是这样。当uniqueidentifier列是主键并且具有默认值时,EDMX 生成器工具不会将它们标记为DatabaseGeneratedOption.Identity. 从严格意义上来说这是正确的,因为该列没有(不能有)身份规范。
因此,在 EDMX 设计器中,您必须手动将StoreGeneratedPatternId 列的属性设置为Identity。好消息是,它在模型更新后仍然存在。
EF 的净效果类似于真实(=数字)标识列。是否为 Id 列分配显式值:
INSERT该列在语句中被忽略SaveChanges。正如您的评论所示,Entity Framework-core(当前版本 2.0.0)对此的处理方式有所不同。当从数据库(包管理器控制台:)生成模型时Scaffold-DbContext,您将在上下文的OnModelCreating覆盖中看到一个条目,如下所示:
entity.Property(e => e.Id)
.HasColumnName("ID")
.HasDefaultValueSql("(newsequentialid())");
Run Code Online (Sandbox Code Playgroud)
但其行为与 EF6 中略有不同。当没有为 Id 列设置值(即它是默认值Guid)时,行为仍然相同:
INSERT语句中该列被忽略SaveChanges。但是,当该Id列设置为默认值以外的其他值时:
INSERT语句的一部分这意味着,除了在 EF6 中之外,作为开发人员,Guid如果您希望 PK 属性始终由数据库生成,则必须注意不要为 PK 属性分配显式值。
| 归档时间: |
|
| 查看次数: |
2293 次 |
| 最近记录: |