È possibile implementare una classe generatore di SQL personalizzata derivata dai SqlServerMigrationSqlGenerator
da System.Data.Entity.SqlServer
namespace:
public class CustomSqlGenerator : SqlServerMigrationSqlGenerator
{
protected override void Generate(AddForeignKeyOperation addForeignKeyOperation)
{
addForeignKeyOperation.Name = getFkName(addForeignKeyOperation.PrincipalTable,
addForeignKeyOperation.DependentTable, addForeignKeyOperation.DependentColumns.ToArray());
base.Generate(addForeignKeyOperation);
}
protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation)
{
dropForeignKeyOperation.Name = getFkName(dropForeignKeyOperation.PrincipalTable,
dropForeignKeyOperation.DependentTable, dropForeignKeyOperation.DependentColumns.ToArray());
base.Generate(dropForeignKeyOperation);
}
private static string getFkName(string primaryKeyTable, string foreignKeyTable, params string[] foreignTableFields)
{
// Return any format you need
}
}
allora avete bisogno di registrare il generatore in DbContext
utilizzando DbConfiguration
:
public class CustomDbConfiguration : DbConfiguration
{
public CustomDbConfiguration()
{
SetMigrationSqlGenerator(SqlProviderServices.ProviderInvariantName,
() => new CustomSqlGenerator());
}
}
E DbConfigurationTypeAttribute
:
[DbConfigurationType(typeof(CustomDbConfiguration))]
public class YourEntities : DbContext
UPDATE: Se si desidera cambiare il nome della chiave primaria, è necessario eseguire l'override seguente Generate
metodi:
protected override void Generate(CreateTableOperation createTableOperation)
{
createTableOperation.PrimaryKey.Name = getPkName(createTableOperation.Name);
base.Generate(createTableOperation);
}
protected override void Generate(AddPrimaryKeyOperation addPrimaryKeyOperation)
{
addPrimaryKeyOperation.Name = getPkName(addPrimaryKeyOperation.Table);
base.Generate(addPrimaryKeyOperation);
}
protected override void Generate(DropPrimaryKeyOperation dropPrimaryKeyOperation)
{
dropPrimaryKeyOperation.Name = getPkName(dropPrimaryKeyOperation.Table);
base.Generate(dropPrimaryKeyOperation);
}
fonte
2015-07-22 03:43:40
L'utilizzo abbondante di grassetto e corsivo rende i miei occhi male! Inoltre, in che modo la soluzione in quella risposta non è adatta? È piuttosto semplice – DavidG
Ok, l'ho cambiato :). Ho troppe tabelle e ogni tabella ha qualche vincolo. Ci vorrà molto tempo per cambiare un nome per ogni chiave esterna – Marusyk