EFCore 迁移命令移除外键

 

继承 MigrationsModelDiffer,重载 GetDifferences 并移除 ForeignKeys

 

复制代码
 1     [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "EF1001:Internal EF Core API usage.", Justification = "<挂起>")]
 2     public class MigrationsModelDifferWithoutForeignKey : MigrationsModelDiffer
 3     {
 4         public MigrationsModelDifferWithoutForeignKey
 5             ([NotNull] IRelationalTypeMappingSource typeMappingSource,
 6             [NotNull] IMigrationsAnnotationProvider migrationsAnnotations,
 7             [NotNull] IChangeDetector changeDetector,
 8             [NotNull] IUpdateAdapterFactory updateAdapterFactory,
 9             [NotNull] CommandBatchPreparerDependencies commandBatchPreparerDependencies)
10             : base(typeMappingSource, migrationsAnnotations, changeDetector, updateAdapterFactory, commandBatchPreparerDependencies)
11         {
12         }
13 
14         public override IReadOnlyList<MigrationOperation> GetDifferences(IModel source, IModel target)
15         {
16             var operations = base.GetDifferences(source, target)
17                 .Where(op => !(op is AddForeignKeyOperation))
18                 .Where(op => !(op is DropForeignKeyOperation))
19                 .ToList();
20 
21             foreach (var operation in operations.OfType<CreateTableOperation>())
22                 operation.ForeignKeys?.Clear();
23 
24             return operations;
25         }
26     }
复制代码

 

 

使用时,替换服务即可:

  services.AddDbContext<MyDbContext>(options =>
  {
    options.UseSqlServer(Default);
    options.ReplaceService<IMigrationsModelDiffer, MigrationsModelDifferWithoutForeignKey>();
  });

 

posted @   i没昵称  阅读(1104)  评论(7编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示