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>();
  });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM