Code-First с SQL Server Express;Ошибка операционной системы 2 - PullRequest
4 голосов
/ 06 декабря 2011

Я пытаюсь сгенерировать встроенную базу данных SQL Server Express (.mdf) с помощью Entity Framework с первым кодом. Раньше все работало нормально, но сейчас я просто повторяю одну и ту же ошибку и не могу определить проблему. Проблема возникает при инициализации, она просто зависает навсегда, и если вы посмотрите на intellitrace, вы увидите какой-то цикл операторов throw / catch, возвращающих

"Невозможно открыть физический файл" c: \ gt \ aspnetdb.mdf ". системная ошибка 2: «2 (не удалось получить текст для этой ошибки. Причина: 1815 ". Невозможно прикрепить файл" c: \ gt \ aspnetdb.mdf "в качестве базы данных 'WikDb'. "(System.Data.SqlClient.SqlException)

UPDATE Я также получаю следующую ошибку прямо перед тем, как "невозможно открыть физический файл ...."

Столбец InvariantName должен быть уникальным. Значение 'System.Data.SqlClient' уже присутствует.

КОНЕЦ ОБНОВЛЕНИЯ

Вот мой app.config

<configuration>
   <system.data>
      <DbProviderFactories>
         <remove invariant="System.Data.SqlServerCe.4.0" />
         <add name="Microsoft SQL Server Compact Data Provider 4.0"
              invariant="System.Data.SqlServerCe.4.0"
              description=".NET Framework Data Provider for Microsoft SQL Server Compact"
              type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0"/>
      </DbProviderFactories>
   </system.data>
   <connectionStrings>
      <add name="WikDb"
           connectionString="data source=.\SQLEXPRESS;Integrated Security=True;
                       database=WikDb;AttachDBFilename=c:\gt\aspnetdb.mdf;
                       User Instance=True"
           providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

А вот мой код инициализации

Database.SetInitializer(new DbInitializer()); //DropCreateDatabaseAlways<WikDb> intializer
Database.DefaultConnectionFactory.CreateConnection( "WikDb" );
WikDb db = new WikDb();
db.Database.Initialize( true );

Любая помощь приветствуется

Спасибо,

1 Ответ

2 голосов
/ 06 декабря 2011

Кажется, ваш экземпляр SQL Server не работает. Это часто происходит при установке дополнительных экземпляров довольно часто - если вы используете экспресс-версию, то есть полную версию проще установить и поддерживать (если вы верите в Google - или мой личный опыт: P). Лучший способ проверить, будет ли в таком случае запускать ваше приложение на другом компьютере с работающим экземпляром SQL Server. Можете ли вы подключиться к вашей базе данных с помощью SSMS (SQL Server Management Studio). Если нет, попробуйте выполнить чистую установку SQL Server.

Дополнительная информация:

Редактировать: Я обнаружил, что SQL Server Express работает лучше всего, если работает один экземпляр по умолчанию (тот, который называется SQLEXPRESS ), все остальное доставляло мне проблемы, может быть, только я.

...