Entity Framework Enable-Migrations

Все мои поиски возвращаются к одной и той же проблеме, которая не является проблемой в этом проекте. Раньше у меня никогда не было с этим проблем, но этот конкретный проект ведет себя странно.

Во-первых, название проекта Site. Класс SiteContext наследует DbContext.

Когда я запускаю Enable-Migrations, даже явно, консоль диспетчера пакетов возвращает ошибку:

PM> Enable-Migrations -ContextType SiteContext
The context type 'SiteContext' was not found in the assembly 'Site'.

Но это прямо в коде:

// Not in a namespace or anything
public class SiteContext : DbContext {
    // public DbSets in here
}

Я могу использовать SiteContext в любом месте кода моего сайта, получить доступ к базе данных через ее объект и т. д. Только команда Enable-Migrations не может ее найти. Помимо этого, функциональность Entity, ориентированная на код, работает правильно.

Любые идеи, что может происходить? Где я это напутал?

(Entity Framework 6.0.2/веб-страницы 3.1.1)


person user2642885    schedule 07.04.2014    source источник
comment
Как это связано с ASP.NET (веб-формы? Если на самом деле нет, отредактируйте свой вопрос, чтобы удалить его из заголовка (что не подходит для тегов).   -  person abatishchev    schedule 07.04.2014
comment
@abatishchev Во-первых, веб-страницы полностью отличаются от веб-форм. Во-вторых, упоминание веб-страниц дает понять, что я не использую MVC, что является предположением по умолчанию для ASP.NET. Поскольку вы правы в том, что это, вероятно, не имеет решающего значения для вопроса, я удалил его.   -  person user2642885    schedule 07.04.2014
comment
Да, извините, это была опечатка. И я не могу согласиться с тем, что ASP.NET = MVC. Это определенно неправильно, а не то, что происходит в StackOverflow. Спасибо за редактирование вашего вопроса. Ваше здоровье!   -  person abatishchev    schedule 08.04.2014


Ответы (2)


Сайты веб-страниц ASP.NET создаются с использованием типа проекта веб-сайта. Этот тип проекта не поддерживает миграцию Entity Framework. Если вы хотите использовать Code First Migrations с сайтом ASP.NET Web Pages, вам необходимо разработать код доступа к данным в виде отдельной библиотеки классов. Этот тип проекта поддерживает миграцию EF. Я писал об этом здесь: http://www.mikesdotnetting.com/Article/217/Code-First-Migrations-With-ASP.NET-Web-Pages-Sites

person Mike Brind    schedule 08.04.2014
comment
Вау, не ожидал от тебя ответа, Майк. Мне нравится ваше освещение веб-страниц, и я прочитал этот пост ранее. Я думаю, что начал это как проект веб-приложения, и у меня есть .csproj, но, глядя на сравнительную диаграмму, кажется, что я создал гибрид с использованием веб-страниц. Несмотря на то, что проект имеет w.a.p. структура, код, кажется, перекомпилируется при изменениях, когда я обновляю файлы .cs без загрузки каких-либо обновленных двоичных файлов. Приводит ли использование веб-страниц к использованию w.s.p. ввести в действие? Могу ли я просто портировать это на w.a.p. если окажется, что я ошибаюсь? Или библиотека - единственный выбор? - person user2642885; 08.04.2014
comment
Я не знаю, как вы запустили приложение веб-страниц как проект веб-приложения. Сайт Razor Web Pages доступен только в том случае, если вы выберете «Новый веб-сайт» вместо «Новый проект», если вы не запустили проект другого типа и не добавили в него файлы .cshtml (я не пробовал это, поэтому не знаю, будет ли это даже Работа). Я связался с командой EF при написании статьи, и они говорят, что единственный способ заставить миграцию работать на веб-страницах — это создать отдельную библиотеку. - person Mike Brind; 08.04.2014
comment
Хорошо, очень приятно знать, и спасибо за вашу помощь. Что я сделал, так это создал новый пустой проект веб-приложения через New Project, а затем установил веб-страницы через диспетчер пакетов. Похоже, что библиотека - это путь сюда. Спасибо еще раз! Кроме того, очень плохо, что есть это ограничение. Я знал, что проекты веб-сайтов по существу устарели (согласно примечанию здесь ), и поскольку они, казалось бы, привязаны к веб-страницам, веб-страницы тоже. - person user2642885; 08.04.2014
comment
Там нет ничего, чтобы сказать, что проекты веб-сайтов устарели. Совет по использованию проектов веб-приложений фактически не изменился с момента выпуска ASP.NET 2.0 и в значительной степени является разумным советом для разработчиков веб-форм. Это не относится к разработчикам MVC или разработчикам веб-страниц, поскольку ни одна из групп не имеет выбора для своего типа проекта. - person Mike Brind; 08.04.2014

Вместо -ContextType используйте -ProjectName и Specify Site.

Изменить: сначала попробуйте -ContextTypeName. Я должен предположить, что вы этого не сделали.

person smd    schedule 07.04.2014
comment
Спасибо за предложение. Я пробовал -ContextTypeName SiteContext и -ProjectName Site безуспешно. - person user2642885; 08.04.2014
comment
Хм. Я вижу, что у вас это без пространства имен. Получаете ли вы такое же поведение в пространстве имен? - person smd; 08.04.2014
comment
Да, это была одна из моих первых мыслей, когда я пытался заставить это работать. Если я брошу его в пространство имен, это ничего не изменит. - person user2642885; 08.04.2014