首页 > 后端开发 > C++ > 如何防止实体框架自动生成主键?

如何防止实体框架自动生成主键?

Barbara Streisand
发布: 2025-01-14 09:56:43
原创
481 人浏览过

How to Prevent Entity Framework from Automatically Generating Primary Keys?

在实体框架中抑制自动主键生成

实体框架的代码优先方法通常会自动生成主键,特别是自动递增标识列。 这种自动行为并不总是合适的。 本文概述了如何覆盖此默认功能。

一种常见方法使用流畅的 API 配置:

<code class="language-csharp">modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
登录后复制

但是,这可能会导致错误:“当 IDENTITY_INSERT 设置为 OFF 时,无法在表“Events”中插入标识列的显式值。”

理解错误

此错误是由冲突引起的。 DatabaseGeneratedOption.None 阻止 EF 生成 ID,但数据库表仍然拥有 IDENTITY 属性,在尝试手动分配键值时会产生冲突。

分辨率

解决方案涉及禁用数据库中 ID 列的 IDENTITY 属性。 使用此 SQL 命令:

<code class="language-sql">ALTER TABLE Events ALTER COLUMN EventID INT NOT NULL</code>
登录后复制

基于属性的替代方案

或者,您可以直接在实体类中使用属​​性:

<code class="language-csharp">[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EventID { get; set; }</code>
登录后复制

此方法在 EF Core 中也能正常运行。

通过实施这些解决方案,开发人员可以控制主键分配、手动指定值并绕过 EF 的默认自动生成。

以上是如何防止实体框架自动生成主键?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板