2013-06-20 5 views
2

Я новичок в ASP.NET MVC, но работал с RoR довольно укусом, поэтому я знаком с шаблоном MVC.ASP.NET MVC 3 Code Сначала с пустой базой данных

Мне любопытно узнать о возможностях обработки части базы данных при использовании подхода Code First. Мне рассказал коллега разработчиков ASP.NET, что вы можете создать пустую базу данных, которая представляет собой базу данных без таблиц и использовать EF Code First для создания таблиц в этой пустой базе данных.

Верно ли это?

Я не могу найти учебники/документацию по этому конкретному подходу в любом месте. Я столкнулся с подходами Code First, которые начинаются с существующей базы данных и таблиц, но не с существующей базой данных без таблиц.

Я хотел бы знать:

Если это возможно. Если это не так, то какой ближайший подход?

Благодаря

Благодарности

+0

Вы даже не должны предоставлять пустой дб. EF будет (re) генерировать один. –

+0

Так что я должен удалить текущую базу данных? – Slinky

ответ

2

На самом базовом уровне вы создаете класс для представления своей таблицы, класс контекста (полученный из DbContext), а затем выполняете команды в консоли диспетчера пакетов для создания миграций/сценариев и/или обновления схемы базы данных напрямую (подумайте об этом как rake db migrate для EF Code First).

public class User 
{ 
    public string Username {get;set;} 
    public string Password {get;set;} 
} 

public class DatabaseContext : DbContext 
{ 
    public DbSet<User> Users {get;set;} 
} 

Инструменты ->Library Package Manager ->Package Manager Console

После консольное окно открыто, убедитесь, что проект с лица/контекста выбран в «Default Project "в верхней части окна и выполните следующие команды:

Add-Migration "Description of your migration" 

Это создаст миграцию для вас, который представляет ваши изменения в базе данных с момента последней миграции. Если это первый (учитывая, что вы начинаете с пустой базы данных), он также будет генерировать системную таблицу с именем «__MigrationHistory», которая используется для отслеживания того, какие миграции уже были применены к базе данных.

Update-Database -script 

Выполнение Update-Database с -script флагом будет генерировать SQL скрипт, который вы можете сохранить/проверить в систему управления версиями, если это необходимо. Если вы предпочитаете просто обновлять базу данных без скрипта, просто оставьте тег -script.

Убедитесь, что строка подключения в web.config называется тем же, что и ваш контекстный класс («DatabaseContext» в этом примере). Это может указывать на вашу существующую базу данных, но она будет управлять или отслеживать изменения только для объектов, которые определены в вашем контексте. я нашел иногда необходимо явно определить контекст при использовании надстройки миграции и команды Update-Database, как так:

Add-Migration "Description of your migration" -connectionstringname "DatabaseContext" 
+0

Спасибо, Скотт. Один следующий вопрос: я просто запускал эти команды, и он выглядит хорошо, но я не вижу новую таблицу в базе данных. Должен ли я видеть новую таблицу? – Slinky

+0

Если вы запустили «Update-Database» без флага -script, тогда да, вы должны увидеть таблицу в своей базе данных. Если вы этого не сделаете, попробуйте флаг -connectionstringname, чтобы убедиться, что вы указали правильное соединение (а не, например, LocalDb или что-то еще). – Scott

+0

Да, это сработало, когда я удалил флаг «-скрипт». Спасибо много – Slinky

2

Да, это возможно за счет дизайна. Вот официальный учебник

http://msdn.microsoft.com/en-us/data/jj591621.aspx

См раздел «Создание исходной модели & базы данных»

Примечание: Если база данных уже существует, то вы можете назвать свой класс DbContext как эту базу данных, или указать " Первоначальный каталог "в строке подключения для соответствия вашей базе данных.

+0

Спасибо Alex, но этот раздел, на который вы ссылаетесь, показывает, как CodeFirst создает базу данных и таблицы. У меня уже есть база данных. Сниппет: «Запустите приложение, и вы увидите, что для вас создана база данных MigrationsCodeDemo.BlogContext». – Slinky

+0

@Slinky Хорошая точка, добавлено разъяснение! –

0

Вы можете просто создать класс Wich, который ваш стол как

public class Person{ 
public Guid id {get;set;}; 
public string Name {get;set;}; 
} 

, то вы можете добавить тип модели объекта ADO.NET данных codefirst пустой базы данных затем добавить класс в эту базу данных

добавить CTOR в дб

static myDB(){ 
Database.setInitializer(new DropCreateDataBaseIfModelChanges<myDB>()); 
} 


public virtual dbset<Person> People {get;set;}; 

после того, как ваша база данных будет создавать