Перечисления EF 5.0 не создаются

ИСХОДНАЯ ИНФОРМАЦИЯ Я использую VS 2010 на машине, на которой я установил .Net 4.5, который, как я читал, был установлен на месте (отменил версию .net 4.0).

У меня есть проекты, все еще ориентированные на 4.0, и вариант 4.5 недоступен, но мне сказали, что все в порядке, поскольку 4.5 была установлена ​​​​на месте. Затем я установил EntityFramework -pre через nuget и заметил, что когда я запускал команды Upgrade-Database -Script, он не генерировал свойства перечисления.

Затем я нашел это. Я снова попытался сделать все с нуля, но он все еще добавлял EntityFramework 4.4 вместо 5.0. Поэтому я вручную изменил все ссылки, чтобы они указывали на версию 5.0, чтобы убедиться, что у меня есть версия EF 5.0. Все скомпилировано.

ПРОБЛЕМА Когда я бегу

Enable-Migrations -EnableAutomaticMigrations

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

Поэтому я вручную убедился, что мой класс правильный, как в:

internal sealed class Configuration : DbMigrationsConfiguration<DataContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

DataContext является подклассом DbContext.

Когда я бегу

Update-Database -Script

Я получаю сообщение "В сборке MyProject не найден тип конфигурации миграции. (В Visual Studio вы можете использовать команду Enable-Migrations из консоли диспетчера пакетов, чтобы добавить конфигурацию миграции)."

MyProject имеет класс конфигурации, о котором я упоминал выше, и в консоли диспетчера пакетов я выбираю правильный раскрывающийся список для своего проекта, содержащего папку Migrations и этот класс конфигурации.

ВОПРОС

  1. Что мне сделать, чтобы убедиться, что при установке EnittyFramework через nuget добавляется версия 5.0, а не 4.4, даже если у меня установлен .Net 4.5?

  2. Если я не могу сделать ничего, связанного с вопросом выше, что я могу сделать, чтобы убедиться, что Upgrade-Database выдает скрипт?


person TimJohnson    schedule 07.05.2012    source источник


Ответы (1)


Entity Framework 5.0 еще не выпущен. Существуют предварительные выпуски, но вам нужно специально включить предварительные выпуски, чтобы NuGet отображал их.

Однако имейте в виду, что EF 5.0 не будет поддерживать в .NET 4.0 все, что будет в .NET 4.5. Да, .NET 4.5 перезаписывает .NET 4.0, но если ваш проект находится в VS2010, он будет настроен на сборку для .NET 4.0, а не .NET 4.5. Он не может использовать функции .NET 4.5, поскольку результат должен работать в системах, в которых нет .NET 4.5. В конце концов, вы ориентируетесь на .NET 4.0, а поддержка enum находится не в DLL EntityFramework, которую вы получаете от NuGet, а в DLL System.Data.Entity, которая является частью среды выполнения .NET, поэтому ее нельзя добавить в . НЕТ 4.0. Вы можете установить бета-версию Visual Studio для создания приложений, ориентированных на .NET 4.5.

Короче говоря: «мне сказали, что это нормально, поскольку 4.5 была установлена ​​​​на месте» - нет, это не подходит для ваших целей.

person Community    schedule 07.05.2012
comment
Оцените комментарий. Я следил за сообщением в блоге Скотта Ханельмана о переориентации платформы .net на версию 4.5 с использованием ‹compilation debug=true strict=false absolute=true targetFramework=4.5›. Вы говорите, что я должен перейти на VS 11? - person TimJohnson; 08.05.2012
comment
@gsogoly Да, .NET 4.5 не поддерживается в VS 2010. Установка targetFramework="4.5" в веб-приложении означает, что ваше приложение, разработанное для .NET 4.0, будет работать в .NET 4.5, но оно останется приложением, разработанным для .NET 4.0, и вы не на самом деле не получить никаких преимуществ .NET 4.5 (за исключением возможных исправлений ошибок в существующих методах). - person ; 08.05.2012
comment
Черт возьми, у меня 32-битная версия Win2k8 R2, а VS11 не работает, потому что она не 64-битная. Неужели нет другого способа настроить таргетинг на .net 4.5 на VS 10? - person TimJohnson; 08.05.2012
comment
@gsogoly VS11 должен отлично работать на 32-битных системах, я сам использую его на Win7. Однако я не уверен в установке его на Windows Server. Но чтобы ответить на ваш вопрос, есть хаки, которые вы можете использовать, чтобы заставить VS2010 принять .NET 4.5, но это включает в себя обман, заставляющий VS думать, что это действительно вариант .NET 4.0, и это не очень хорошо работает с NuGet (который также будет видите его как непризнанный вариант .NET 4.0 и не можете установить пакеты), так что это не годится, поскольку вы используете Entity Framework. - person ; 08.05.2012
comment
@gsogoly И взлом - единственный возможный способ: VS2010 SP1 заносит .NET 4.5 в черный список, отказываясь открывать любой проект, нацеленный на него. - person ; 08.05.2012