自定义主键名称

Custom Primary Key Names

我正在尝试自定义由 EF 生成的 SQL 中的主键名称。我已经通过剥离模式名称成功地自定义了外键。但是,当我对主键使用相同的技术时,它似乎不起作用。

这是生成器class我正在使用:

public class KeyNamingGenerator : SqlServerMigrationSqlGenerator
{
    protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation)
    {
        dropForeignKeyOperation.Name = StripSchema(dropForeignKeyOperation.Name);
        base.Generate(dropForeignKeyOperation);
    }

    protected override void Generate(DropPrimaryKeyOperation dropPrimaryKeyOperation)
    {
        dropPrimaryKeyOperation.Name = StripSchema(dropPrimaryKeyOperation.Name);
        base.Generate(dropPrimaryKeyOperation);
    }

    protected override void Generate(AddForeignKeyOperation addForeignKeyOperation)
    {
        addForeignKeyOperation.Name = StripSchema(addForeignKeyOperation.Name);
        base.Generate(addForeignKeyOperation);
    }

    protected override void Generate(AddPrimaryKeyOperation addPrimaryKeyOperation)
    {
        addPrimaryKeyOperation.Name = StripSchema(addPrimaryKeyOperation.Name);
        base.Generate(addPrimaryKeyOperation);
    }

    private string StripSchema(string name)
    {
        return Regex.Replace(name, @"(?<=_)[a-zA-Z]*\.", "", RegexOptions.Compiled);
    }
}

与外键相关的生成方法可以正常工作,但与主键相关的方法则不行。我错过了什么?

事实证明,AddPrimaryKeyOperation 仅在您独立于 table 创建添加 PK 时才起作用。一时兴起,我决定深入研究 CreateTableOperation,它有一个您可以操作的 PrimaryKey 属性。

这是完整的代码:

    protected override void Generate(CreateTableOperation createTableOperation)
    {
        createTableOperation.PrimaryKey.Name = StripSchema(createTableOperation.PrimaryKey.Name);
        base.Generate(createTableOperation);
    }

关于如何使用 SqlServerMigrationSqlGenerator 的几个例子并没有真正解决这个区别。