CreateDatabaseIfNotExists<> не хочет пересоздавать БД
От: senglory  
Дата: 06.09.15 20:24
Оценка:
Есть такое подключение в web.config:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WebApplication1.mdf;Initial Catalog=aspnet-WebApplication1-20150804043722;Integrated Security=True" providerName="System.Data.SqlClient" />

В перввый запуск веб-приложения все было нормально, CreateDatabaseIfNotExists<> вызвался и в App_Data появился WebApplication1.DAL.RUSContext3.mdf. Потом я удалил эти файлы (MDF и ДВА)б снова запускаю веб-приложение, а оно мне пишет вот такую хрень:

Cannot attach the file 'c:\tmp\WebApplication1\WebApplication1\App_Data\WebApplication1.DAL.RUSContext3.mdf' as database 'WebApplication1.DAL.RUSContext3'.


И CreateDatabaseIfNotExists<> даже не вызвался. IIS пробовал и express, и полноценный — пофигу. В чем причина и как EF заставить создавать БД?
Re: CreateDatabaseIfNotExists<> не хочет пересоздавать БД
От: Olaf Россия  
Дата: 07.09.15 04:04
Оценка: +1
Здравствуйте, senglory, Вы писали:

S>...

S>В перввый запуск веб-приложения все было нормально, CreateDatabaseIfNotExists<> вызвался и в App_Data появился WebApplication1.DAL.RUSContext3.mdf. Потом я удалил эти файлы (MDF и ДВА)б снова запускаю веб-приложение, а оно мне пишет ...

А вы каким образом удалили БД – подключились к неименованному экземпляру (LocalDb)\v11.0 и выполнили drop database или зашли в файловую систему и просто удалили два файла? Если удалили два файла, то СУБД SqlLocalDb так ничего и не узнала о ваших намерениях, она по-прежнему содержит метаданные о БД и даже может отображать ее в списке доступных, но физически сама БД уже отсутствует. Поэтому предполагаю, что проверка на существование с использованием метаданных проходит, а вот попытки обращения к самой БД завершаются неудачей.

Для подтверждения гипотезы, следует подключиться к экземпляру (LocalDb)\v11.0 и проверить наличие или отсутствие БД, например, используя SSMS или VS.

S>... IIS пробовал и express, и полноценный — пофигу. В чем причина и как EF заставить создавать БД?


Ваша проблема к IIS не имеет никакого отношения, конфликт на стороне СУБД.
Re[2]: CreateDatabaseIfNotExists<> не хочет пересоздавать БД
От: senglory  
Дата: 07.09.15 06:01
Оценка:
O>Для подтверждения гипотезы, следует подключиться к экземпляру (LocalDb)\v11.0 и проверить наличие или отсутствие БД, например, используя SSMS или VS.

А как проверить наличие записей об этих фантомных базах? Подключился к (LocalDb)\v11.0 , но в master.sys.databases ничего нет про них, только master? model, tempdb и msdb
Re[3]: CreateDatabaseIfNotExists<> не хочет пересоздавать БД
От: Olaf Россия  
Дата: 07.09.15 06:48
Оценка:
Здравствуйте, senglory, Вы писали:

O>>Для подтверждения гипотезы, следует подключиться к экземпляру (LocalDb)\v11.0 и проверить наличие или отсутствие БД, например, используя SSMS или VS.


S>А как проверить наличие записей об этих фантомных базах? Подключился к (LocalDb)\v11.0 , но в master.sys.databases ничего нет про них, только master? model, tempdb и msdb


Если указание БД важно для выполнения запроса, то можно использовать master.sys.databases

Очень странно. Вы подключились именно к тому экземпляру (localdb)\v11.0 ? Здесь варианта два — либо это локальный экземпляр на вашем компьютере, либо экземпляр на удаленном сервере рядом с IIS. Подключаться можно только локально к localdb.

Как вариант попробовать другое имя БД, возможно, станет понятно на этом ли экземпляре она создается. Можно конечно удалить автоматический экземпляр из командной строки и создать заново, но в варианте с «осиротевшей» БД ее имя должно было фигурировать в метаданных.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.