2015-07-14 7 views
1

Я немного застрял с кодом EF-first, чтобы создать новую базу данных. У нас есть существующая база данных и успешно используется подход Model-First. Теперь я хотел бы существующую модель, чтобы создать новую базу данных во время выполнения, как это:EF 6 Code-First, не создавая одну таблицу

public class DatabaseInitializer : IDatabaseInitializer<MDREntities> 
{  
    public void InitializeDatabase(MDREntities dbContext) 
    { 
     if (dbContext.Database.Exists()) 
     { 
      // Delete the existing database 
      dbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, "ALTER DATABASE [" + dbContext.Database.Connection.Database + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE"); 
      dbContext.Database.Delete(); 
     } 
     // Create new database 
     dbContext.Database.Create(); 

     // Add initial data 
     addMasterData(dbContext); 

     // Commit changes. 
     dbContext.SaveChanges(); 
    } 
} 

Вышеизложенных прогонов через успешно и все мои таблицы созданы для 1 исключения.

Я сделал следующее без везения:

  • таблица делает существует в модели EDMX.
  • Модель .tt-файла генерирует класс для таблицы.
  • В контексте .tt-файла создается таблица DbSet для таблицы.
  • Я удалил мою модель edmx и воссоздал из базы данных.

Возможно ли «проследить», что делает dbContext.Database.Create();, и если что-то действительно не так?

Я также заметил, что «отсутствующая» таблица является единственной с составной частью PK, может возникнуть проблема?

Update:

Когда я взглянул на SQL Profiler, я нашел этот комментарий о том, что таблица игнорируется. К сожалению, это не говорит, почему:

-- Ignoring entity set with defining query: [MDRModelStoreContainer].[tblRelatedPatient] 

Вот таблица отображается в EDMX:

enter image description here

+2

Попробуйте добавить 'dbContext.Database.Log = System.Console.Write', чтобы получить выход SQL, сбрасываемый на консоль. –

+0

@JasonGerard, к сожалению, 'dbContext.Database.Log' не записывал операторы' CREATE TABLE', а только 'ALTER DATABASE ...' и 'INSERT INTO ...'. Я посмотрел на профилировщика. Соответственно обновляющий вопрос. –

ответ

0

Исходная таблица не имеет первичного ключа.

Несмотря на то, EDMX показал в дизайнеру Composite Primary Key, таблица не получил успешно создан из EDMX модели пока я не обновил исходную базу данных и освежил EDMX, странно ...

  • Добавить PK к базовой таблице (оригинал сопоставлен с edmx)
  • Обновить модель edmx
  • Теперь dbContext.Database.Create(); создает стол успешно.
Смежные вопросы