Как изменить имена столбцов таблицы сопоставления?

1

Я создаю базу данных Entity Framework 6, используя пустую модель конструктора EF.

Моя проблема может быть дублирована следующим образом. У меня есть две таблицы и между ними есть много разных связей.

Изображение 174551

Когда я создаю базу данных, она создает третью таблицу сопоставления, которую я ожидаю. Однако имена столбцов являются неожиданными.

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
Теги:
entity-framework

2 ответа

0

В 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(), а затем измените генерацию так, как вы хотите.

  • 0
    Благодарю. Эту информацию я нашел в поиске. К сожалению, я пытаюсь найти способ сделать это в Model First.
  • 0
    Вы знакомы с T4?
Показать ещё 2 комментария
0

На данный момент у вас уже есть имя таблицы в имени вашего основного ключа, что, на мой взгляд, является избыточной информацией.

Если ваше имя в ваших основных ключевых столбцах Word_Id Id, тогда EF автоматически укажет ваши столбцы Word_Id и WordType_Id.

  • 0
    Не совсем. Это Words_Id и WordTypes_Id. Обратите внимание на множественное число. Кроме того, у меня был только Id. Затем я прочитал, что EF6 может не указывать имя таблицы, если я использую это соглашение. Это не сработало. Независимо от того, использую ли я Id или WordId в таблице Word, мне нужно, чтобы столбец WordToWordTypeMap был WordId и WordTypeId.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню