自定义主键名称
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 的几个例子并没有真正解决这个区别。
我正在尝试自定义由 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 的几个例子并没有真正解决这个区别。