Entity framework 自定义主键名称

Entity framework 自定义主键名称,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我试图自定义EF生成的SQL中的主键名称。我已经通过剥离模式名称成功地自定义了外键。然而,当我对主键使用相同的技术时,它似乎不起作用 这是我使用的生成器类: public class KeyNamingGenerator : SqlServerMigrationSqlGenerator { protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation) { drop

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

这是我使用的生成器类:

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);
    }
}
公共类KeyNamingGenerator:SqlServerMigrationSqlGenerator
{
受保护的覆盖无效生成(DropForeignKeyOperation DropForeignKeyOperation)
{
dropForeignKeyOperation.Name=StripSchema(dropForeignKeyOperation.Name);
生成(dropForeignKeyOperation);
}
受保护的覆盖无效生成(DropPrimaryKeyOperation DropPrimaryKeyOperation)
{
dropPrimaryKeyOperation.Name=StripSchema(dropPrimaryKeyOperation.Name);
生成(dropPrimaryKeyOperation);
}
受保护的覆盖无效生成(AddForeignKeyOperation AddForeignKeyOperation)
{
addForeignKeyOperation.Name=StripSchema(addForeignKeyOperation.Name);
base.Generate(addForeignKeyOperation);
}
受保护的覆盖无效生成(AddPrimaryKeyOperation AddPrimaryKeyOperation)
{
addPrimaryKeyOperation.Name=StripSchema(addPrimaryKeyOperation.Name);
生成(addPrimaryKeyOperation);
}
私有字符串StripSchema(字符串名称)
{

return Regex.Replace(name,@)(?结果表明,AddPrimaryKeyOperation仅在添加独立于表创建的PK时才起作用。我一时兴起,决定深入研究CreateTableOperation,它有一个PrimaryKey属性,您可以操作

以下是完整的代码:

    protected override void Generate(CreateTableOperation createTableOperation)
    {
        createTableOperation.PrimaryKey.Name = StripSchema(createTableOperation.PrimaryKey.Name);
        base.Generate(createTableOperation);
    }
关于如何使用SqlServerMigrationSqlGenerator的几个例子并没有真正解决这一区别