我們有自己的命名對象的外部約定,我需要更改自動生成的外鍵約束的命名約定。現在看起來像:FK_dbo.City_dbo.CityType_City_CityTypeId
但我希望它被稱爲City_FKC_CityType
。更改外鍵約束命名約定
我發現一個similar question其中說,你可以手動更改約束的名稱。但是,這不適合我,因爲我有很多表和外鍵約束。
我發現了一些關於「Custom Code First Conventions」的信息,我想知道是否可以使用它更改約束的名稱,或者是否有任何方法來實現它?
另一個變種是下載EF的源代碼,進行更改和使用,但在緊急情況下。
作爲一個方面說明,我還想更改主鍵的命名約定。
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
}
}
然後,你需要在DbContext
註冊您的發電機使用DbConfiguration
:
你豐富的使用粗體和斜體讓我的眼睛受傷了!另外,該答案中的解決方案不適合哪種方式?這很簡單。 – DavidG
好吧,我改變了它:)。我有太多的表,每個表都有一些限制。更改每個外鍵的名稱需要很長時間 – Marusyk