проблемы с автоматическим созданием базы в EF4 - PullRequest
0 голосов
/ 15 июля 2011

Я изучаю ASP.NET MVC 3 с помощью Entity Framework Code First.Я следую учебному пособию и скачал соответствующее решение для тестирования на моей локальной машине.Что-то, что я не очень хорошо понял, это автоматическое создание базы данных (если ее еще не было на диске).При первом запуске приложения база данных создается для меня.Это нормально.

Вот раздел в Web.config

<add name="BlogContext" 
     connectionString="Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC.mdf;Integrated Security=SSPI"
     providerName="System.Data.SqlClient" /> 

Но у меня есть две проблемы:

1st. В целях тестирования я удалилбазы данных на диске и снова запустить решение.Я думал, что база данных будет создана автоматически, но я ошибся: я получил сообщение об ошибке ниже:

{"Unable to open the physical file \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf.mdf\". Operating system error 2: \"2(failed to retrieve text for this error. Reason: 15105)\".\r\nCannot open database \"CodeFirstMVC.mdf\" requested by the login. The login failed.\r\nLogin failed for user 'sa'.\r\nFile activation failure. The physical file name \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf_log.LDF\" may be incorrect."}

Я заметил, что если я изменю имя файла в моем файле Web.config, то база данных снова будет успешносоздано. Можете ли вы объяснить мне? Почему я должен изменить имя базы данных, чтобы запустить его снова?

2nd. База данных создается в папке, расположенной в C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQL2008 \ MSSQL \ DATA.Я хотел бы хранить свою базу данных в каталоге App_Data. Как мне продолжить?

1 Ответ

1 голос
/ 15 июля 2011

Initial catalog не путь к файлу. Это имя базы данных. AttachDbFilename используется для указания файла, поэтому строка подключения должна выглядеть следующим образом:

Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC;AttachDbFilename=|DataDirectory|CodeFirstMVC.mdf;Integrated Security=SSPI

Где |DataDirectory| указывает серверу SQL использовать локальный каталог данных приложения вместо глобального каталога данных SQL Server. Локальный каталог данных для веб-приложения: App_Data.

Edit:

Я только что заметил, что вы, вероятно, используете полный SQL-сервер вместо SQL-сервера экспресс. Как я знаю, создание базы данных в App_Data автоматически является особенностью SQL Server Express. Это также объясняет первую ошибку, поскольку сервер SQL создал базу данных с именем CodeFirstMVC.mdf и сохранил базу данных в своем глобальном каталоге данных в файле CodeFirstMVC.mdf.mdf и в журнале транзакций в файле CodeFirstMVC.mdf.ldf. Он также зарегистрировал эту базу данных внутри страны. Удаляя файлы, вы не удаляли базу данных с SQL-сервера. Вы просто нарушаете его функциональность, но SQL-сервер все еще считает, что база данных существует. Это также причина, почему вы должны изменить имя, чтобы оно работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...