Я создаю базу данных Entity Framework 6, используя пустую модель конструктора EF.
Моя проблема может быть дублирована следующим образом. У меня есть две таблицы и между ними есть много разных связей.
Когда я создаю базу данных, она создает третью таблицу сопоставления, которую я ожидаю. Однако имена столбцов являются неожиданными.
CREATE TABLE [dbo].[WordWordType] (
[Words_WordId] int NOT NULL,
[WordTypes_WordTypeId] int NOT NULL
);
Обратите внимание, что таблица сопоставления имеет имена столбцов, которые являются несколько избыточными и длинными. Имена столбцов включают имя таблицы, которое является избыточным, а затем подчеркивание, за которым следует имя столбца Key.
WordWordType
- Words_WordId
- WordTypes_WordTypeId
Я надеюсь, что EF 6 может создать таблицу сопоставления с именами столбцов, которые не включают имя таблицы и подчеркивание. Мне нужно, чтобы таблица выглядела следующим образом.
WordWordType
- WordId
- WordTypeId
В Code First вы можете использовать свободный API
modelBuilder.Entity<Word>()
.HasMany(w => w.WordTypes)
.WithMany(wt => wt.Words)
.Map(x =>
{
x.ToTable("WordWordType");
x.MapLeftKey("WordId");
x.MapRightKey("WordTypeId");
});
но поскольку вы используете модель сначала, я думаю, что единственный способ - изменить файл T4, который отвечает за генерацию SQL-скрипта. Вы можете найти его в разделе " Database Script Generation
" в своих свойствах модели.
Обновить
см. это для отладки T4.
SSDLToSQL10.tt
содержит два основных раздела для этого: один - Creating all tables
в строке 150, а другой - Creating all FOREIGN KEY constraints
в строке 196, они перечисляют в Store.GetAllEntitySets()
и Store.GetAllAssociationSets()
и создают таблицы и внешние ключи в базе данных, отлаживать файл T4 и посмотреть, где создана ваша таблица сопоставлений, я подозреваю, что она находится в Store.GetAllEntitySets()
, а затем измените генерацию так, как вы хотите.
На данный момент у вас уже есть имя таблицы в имени вашего основного ключа, что, на мой взгляд, является избыточной информацией.
Если ваше имя в ваших основных ключевых столбцах Word_Id
Id
, тогда EF автоматически укажет ваши столбцы Word_Id
и WordType_Id
.