Общая путаница в Entity Framework - PullRequest
3 голосов
/ 19 апреля 2011

Так что я столкнулся с чем-то и хотел знать, не могли бы вы мне помочь.Я очень новичок (это мой первый проект на этих языках) для MS MVC 2 и Entity Framework 4.0.Я разработал модель, используя подход Model First и графический дизайнер.У меня еще не было базы данных SQL для этого, и я подумал, что она просто отключена, но, может быть, я просто забыл, что где-то указал строку подключения.Так что я продолжаю заниматься своим бизнесом, запуская компоненты MVC, используя недавно созданные типы из EF.Я пытаюсь использовать шаблон Repository, а также Ninject для внедрения зависимостей.Поэтому у меня было много времени, прежде чем мне пришлось беспокоиться о реальном хранении данных.Что подводит меня к моей проблеме: я сейчас в этой точке.

Я думал, что он подключается к файлу .mdf и запускается на экземпляре SQLExpress, но я не мог найти ничего, что могло бы это поддержать.У меня не было установлено SSMS, поэтому я не мог понять, как правильно проверить.В конце концов получил это и работает, и нет дБ.Так что теперь я запутался в том, где это на самом деле подключено, если вообще.Я решил, что это слишком странно, и хочу начать все сначала.Я сгенерировал SQL-скрипт для Модели и создал новую базу данных в SSMS для запуска этого скрипта.Запустите скрипт и все хорошо.Затем я вхожу в VS и запускаю сценарий Database First.Таким образом, модель теперь показывает все мои таблицы и эффективно запирает несколько полей, указывая их как ключи, когда их не должно было быть.Исправлено, и теперь я вернулся к выяснению проблемы, которая разочаровала меня в первую очередь.

У меня есть таблица User с полем userId, которое должно быть Guid, но во время первоначального моделирования я пропустил его, и это было поле varchar.Я не смог исправить сопоставление под ним, чтобы изменить базовое (не уверенное в фактической терминологии для него) поле на Guid.Я изменил тип модели, но ничего не обновил базу данных.Это в основном поставило меня в странное положение.Я полагаю, что должен позволить EF управлять SQL для меня без моего участия, но если это правда, как я могу продвинуть подобное изменение?Я ограничен удалением всей базы данных каждый раз, когда мне нужно внести изменения в схему?

Извините, если это самый плохой из вопросов о новичках, но я пытаюсь разобраться со всем этим и действительно могу использовать некоторые данные.Последний набор языков, который я использовал, был ASP.Net 2.0 с типизированными наборами данных ADO.Net.Мне лучше перейти на кодовый подход?Если бы мне пришлось это сделать, нужно ли мне снова начинать управлять SQL?

Я считаю, что это мой первый вопрос, поэтому я прошу прощения, если я что-то нарушил;Я думаю, что все ясно.

1 Ответ

1 голос
/ 19 апреля 2011

Хорошо - EF хранит строку подключения в файле Web.config.Ваше подозрение, что EF подталкивает вас к удалению базы данных и созданию новой при первом использовании модели, частично верно.Хорошей новостью является то, что весь этот процесс обусловлен рабочим потоком, который может быть изменен или заменен.Вы не должны делать это сами.Вы можете загрузить Модуль создания базы данных Entity Designer , который содержит несколько новых рабочих процессов и шаблонов, которые позволяют наращивать базу данных с помощью поэтапного подхода на основе модели.Это имеет два недостатка:

  • У вас должен быть VS 2010 Premium или Ultimate, поскольку он использует функции базы данных из этих выпусков.
  • Не каждое изменение модели может обрабатываться пошагово.Все, что может привести к потере данных, закончится исключением.Я ожидаю, что это будет иметь место при изменении string на Guid.Решением в этом случае является либо модификация БД вручную, либо удаление ее и воссоздание с нуля.

Сначала код, вероятно, не поможет вам, поскольку в этом подходе в настоящее время отсутствует эволюция базы данных, но в нем полностью автоматизирован процессбазы данных, если модель изменится.

Кстати.вам не нужно SSMS для проверки базы данных.SQL-сервер также предлагает некоторые инструменты (которые должны быть установлены отдельно) с утилитами командной строки для доступа к базе данных - osql или sqlcmd.Вы также можете использовать обозреватель серверов в Visual Studio Professional и более поздних версиях.

...