Я прочитал много постов о том, как указывать имя внешнего ключа в отношениях, проблем там нет.Однако я хотел бы знать, есть ли способ изменить имя первичных ключей и отношений?
Например, у вас есть таблица User с UserId в качестве первичного ключа.Первичный ключ называется PK_ Пользователь _1788CC4C07020F21 (или что-то в этом роде) при первом создании базы данных кода EF.Или у вас есть ссылка из вашей таблицы User на вашу таблицу UserVersion, которая EF называется UserVersion_User .Мне бы хотелось, чтобы первичный ключ назывался что-то вроде PK_User , а внешняя ссылка - как FK_UserVersion_User .
Есть ли способ сделать это?Некоторые соглашения отменяют или фактически могут указывать текст?
Спасибо.
Обновление: Основываясь на ответе и ссылке ниже, я сделал следующее в моем методе Seed.Это своего рода грубая сила, но я согласен с тем, что ее можно улучшить, особенно если вы создаете свободно распространяемые файлы конфигурации типа сущностей и т. Д. С помощью генератора.То же самое можно сделать для имен ссылок внешнего ключа.
protected override void Seed(TodoDataContext context)
{
FixIndexes(context, "User");
FixIndexes(context, "UserStats");
FixIndexes(context, "UserRole");
FixIndexes(context, "UserVersion");
FixIndexes(context, "UserUserRoleVersion");
}
private void FixIndexes(TodoDataContext context, string tableName)
{
const string renamePrimaryKeySql = @"
DECLARE @TableName NVARCHAR(128)
DECLARE @IndexName NVARCHAR(128)
DECLARE @OldName NVARCHAR(128)
DECLARE @NewName NVARCHAR(128)
SELECT @TableName = '{0}'
SELECT @IndexName = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ,INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
WHERE pk.TABLE_NAME = @TableName
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND C.TABLE_NAME = PK.TABLE_NAME
AND C.CONSTRAINT_NAME = PK.CONSTRAINT_NAME
SELECT @OldName = @TableName + '.' + @IndexName
SELECT @NewName = 'PK_' + @TableName
exec sp_rename @OldName, @NewName, 'INDEX'";
context.Database.ExecuteSqlCommand(string.Format(renamePrimaryKeySql, tableName));