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

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

Barbara Streisand
Barbara Streisand原创
2025-01-14 09:56:43441浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn