EF Code First Существующая база данных - PullRequest
3 голосов
/ 14 июня 2011

Сначала используйте код EF 4.1. Я хотел остановить создание базы данных EF из моделей. Как я понимаю, если вы передадите имя Connectionstring, он будет использовать существующую базу данных из этой строки подключения. Однако, если база данных не существует, она создаст базу данных, и все таблицы образуют модель.

  <connectionStrings>
<add name="DiaryContext" connectionString="Data Source=.;Initial Catalog=Diary;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>

        public MyDiaryContext() : 
        base("name=DiaryContext")
    {
        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = false;
    }

В приведенном выше примере он ведет себя следующим образом:

(1) если база данных не существует, она создаст базу данных со всеми таблицами и т. Д.

(2) если база данных существует и у нее нет таблиц, она не будет создавать новые таблицы

(3) если я добавлю новую модель в код EF, она не создаст новую таблицу в базе данных.

Я доволен 2 и 3, но в случае (1), если база данных не существует, я хотел, чтобы она вызвала исключение вместо создания БД и таблиц.

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

Кто-нибудь знает, как этого добиться?

Большое спасибо,

1 Ответ

5 голосов
/ 15 июня 2011

Когда вы сначала используете EF Code, вам нужно установить инициализатор БД. Например, я делаю это в конструкторе моего DataContext

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<WebContext>());

Есть несколько значений по умолчанию, таких как DropCreateDatabaseIfModelChanges и DropCreateDatabaseAlways, которые вы можете использовать. Однако, если вы не хотите создавать какие-либо БД или таблицы, просто убедитесь, что инициализатор не установлен и не унаследован, и вы можете использовать модель для существующей БД. Хорошо артикул от scot gu

...