主页>技术社区>IT 技术>编程开发>.NET

[EF Core] EF Core Code-First 移除外键 —— 重写SQL生成器

eIT.com.cn 2023/3/17 15:53:43 阅读 5 次

打印


[EF Core] EF Core Code-First 移除外键 —— 重写SQL生成器

使用EF Core时最烦的就是生成的某些 SQL 其实并不是你想要的结果,例如外键约束等等。

一个最简单的例子就是,因为EF Core会根据导航属性生成外键约束等原因,导致很多开发者抛弃了更易维护的Code First模式,而转为Db First以获取更自由的数据库结构。

其实我们可以通过重写EF CoreMigrationsSqlGenerator来解决:

public class CustomMigrationsSqlGenerator : MigrationsSqlGenerator
{   public CustomMigrationsSqlGenerator(MigrationsSqlGeneratorDependencies dependencies, IMigrationsAnnotationProvider migrationsAnnotations) : base(dependencies)   {   }
   protected override void Generate(Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation operation, IModel? model, MigrationCommandListBuilder builder, bool terminate = true)   {       operation.ForeignKeys.Clear();       base.Generate(operation, model, builder, terminate);   }
}
public class CustomDbContext : DbContext
{   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)   {       // ...       optionsBuilder.ReplaceService<IMigrationsSqlGenerator, CustomMigrationsSqlGenerator>();       // ...   }
}

上述代码便提供了移除ForeignKeys即表结构中的外键约束。当然,需要在DbContext中重写OnConfiguring方法,使用optionsBuilder.ReplaceService将默认的SQL生成器,替换为我们自己实现的部分,就可以在EF Core生成数据库结构时,直接去除外键约束了。

初次之外,根据MigrationsSqlGenerator暴露出来的 API 来看,我们还能做很多事情,例如重写字段的类型或者在实体上做文章,具体需要大家根据场景进行探寻了。






相关内容


热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
生活常识小贴士 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 法律知识 科技频道 电影影讯 留学考研学习 星座生肖|解梦说梦




关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明

      Copyright © 2023 eIT.com.cn. All Rights Reserved. 豫ICP备2022012332号