在不修改实体类(注释)或数据上下文(使用 fluentapi)的情况下禁用标识(自动递增)

Posted

技术标签:

【中文标题】在不修改实体类(注释)或数据上下文(使用 fluentapi)的情况下禁用标识(自动递增)【英文标题】:Disabling identity (auto-incrementing) without modifying entity classes (annotations) or datacontext (using fluentapi) 【发布时间】:2022-01-09 02:24:22 【问题描述】:

有没有办法在不更改dbcontext 或实体的情况下临时禁用(实体框架 6+,代码优先)身份增量以用于数据迁移目的。是否有任何数据库全局属性、方法等或任何拦截器注入或任何其他方式来完成此操作。

假设我们不能修改数据上下文或实体类。因此,我将无法使用数据注释或流畅的 API 来更改身份增量行为。 DataContext 和实体类在另一个项目中,不应修改,因为它们正在被其他一些应用程序使用。所有实体都使用

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

对其 ID 属性的注释。

有没有人遇到过类似情况或知道如何解决。

提前致谢。

【问题讨论】:

【参考方案1】:

您可以添加一个特殊用途的 DbContext 子类型来覆盖 OnModelCreating 中的基本配置。

【讨论】:

感谢大卫回复。您是否建议在派生的 DbContext 上为每个实体使用 FluentApi 配置?如果是这样,我不喜欢这样做。我必须将所有新模型更改反映到我的新派生类中。而且我不知道 fluent api 是否会覆盖已经定义的数据注释。这个解决方案可能是我最后的选择。

以上是关于在不修改实体类(注释)或数据上下文(使用 fluentapi)的情况下禁用标识(自动递增)的主要内容,如果未能解决你的问题,请参考以下文章

从 JPA 注释的实体类自动生成数据模式

修改现有的 yaml 文件并添加新的数据和注释

tk.mybatis 逆向工程,生成带数据库注释的实体类

如何使Readity实体框架数据上下文

如何使用 managedObjectContext 来使用实体?

如何从表中提取上下文数据来训练自定义命名实体识别器?