using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Update;

namespace IRaCIS.Core.Infra.EFCore;


/// <summary>
/// 迁移的时候，忽略显示外键的建立，增加灵活性，同时为了兼容之前dbfirst 一个字段关联多个表
/// </summary>
public class NoForeignKeyMigrationsSqlGenerator : SqlServerMigrationsSqlGenerator
{


    public NoForeignKeyMigrationsSqlGenerator(MigrationsSqlGeneratorDependencies dependencies, ICommandBatchPreparer commandBatchPreparer)
  : base(dependencies, commandBatchPreparer)
    {
    }

    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);
    }
    protected override void Generate(AddForeignKeyOperation operation, IModel? model, MigrationCommandListBuilder builder, bool terminate = true)
    {

    }

    protected override void Generate(DropForeignKeyOperation operation, IModel? model, MigrationCommandListBuilder builder, bool terminate = true)
    {
        // 忽略所有删除外键的操作
        // 不调用 base.Generate 来跳过生成删除外键的SQL
    }
    ////忽略掉唯一约束，因为dicom Id 的问题
    //protected override void Generate(CreateIndexOperation operation, IModel? model, MigrationCommandListBuilder builder, bool terminate = true)
    //{
    //    // 如果索引是唯一的，则忽略，不生成SQL语句
    //    if (operation.IsUnique)
    //    {
    //        return;  // 跳过唯一约束的索引创建
    //    }

    //    // 如果不是唯一索引，则继续生成
    //    base.Generate(operation, model, builder, terminate);
    //}



}
