2014-01-17 1 views
0

Итак, я только что узнал, что мне нужно понизить мое решение до .NET 4.0. Для этого я обновился до Entity Framework 6.0 (который должен быть совместим с .NET 4.0) и преобразовал все мои проекты в целевую среду 4.0. При попытке создания моего проекта данных EDMX имеет несколько ошибок. Я не могу открыть его нормально, но я могу изменить данные XML. Здесь ошибка:Ошибки сборки, связанные с изменением сущности

The type or namespace name "TABLENAME" could not be found. 

я получаю кучу из них в течение нескольких (но не всех) таблиц в моей базе данных SQL. Обычно я бы делал обновление базы данных, но это не представляется возможным здесь, так как я не могу нормально открыть файл. Кроме того, перечисляемые типы, которые были определены в EDMX бросает эту ошибку:

The element 'Schema' in namespace 'http://schemas.microsoft.com/ado/2008/09/edm' has invalid child element 'EnumType' in namespace 'http://schemas.microsoft.com/ado/2008/09/edm'. List of possible elements expected: 'Using, Association, CopmlexType, EntityType, Function, EntityContainer' in namespace 'http://schemas.microsoft.com/ado/2008/09/edm' as well as any element in namespace '##other'. 

XML, генерирующий этот вопрос:

<EnumType Name="CustomEnum" /> 
    <Member Name="Enum1"> 
    <Member Name="Enum2" /> 
    ... 
    <Member Name="Enum10" /> 
</EnumType> 

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

+0

Вы использовали VisualStudio 2012 без инструментов EF6, установленных для понижения вашего проекта? Если вы это сделаете, это изменит пространства имен в edmx на v2 и v2 edmx не поддерживает перечисления. Инструментарий EF6 не будет понижать EDMX до версии v2, если проект перенацеливается на .NET Framework 4. Вы можете получить EF6-инструмент отсюда: http: //www.microsoft.com/en-us/download/details.aspx? Id = 40762. Также взгляните на мое сообщение в блоге на инструментах EF6: http://blog.3d-logic.com/2013/11/10/what-changed-in-the-ef-tooling-in-visual-studio-2013- и-visual-studio-2012-out-of-band/ – Pawel

ответ

0

Разница между Entity Framework 4.0 и предшествующей версией и EF 4.1 и выше огромна. Система была перенесена из «objectcontext» в «dbcontext». Если вы просто хотите, чтобы ваше решение выполнялось, а не обновлялось до последнего, я бы рекомендовал удалить все файлы .tt, снова включив генерацию для edmx и просто используя базовый EF 4.0.

Если вы хотите перейти к новой парадигме 6.0 dbcontext, вы можете провести много работы по перепроектированию нескольких классов и тому, как они взаимодействуют с EF.

+0

Это неправда. Вы можете использовать как ObjectContext, так и DbContext в EF6, EF5 и EF4 (EF4 и EF5 требуется установка пакета EntityFramewwork NuGet, в то время как EF6 - только NuGet и не полагается на System.Data.Entity.dll). На самом деле EF4.x и EF5 построены поверх System.Data.Entity.dll. – Pawel

+0

Раньше мы использовали Entity 5.0, а не 4.0, я просто пытался понизить платформу .NET до 4.0. – jokulmorder

+0

Если вы использовали перечисления, это не сработает. Enums (и еще несколько других) не поддерживались в EF4. Если вам действительно нужно запустить .NET Framework 4, я бы рекомендовал использовать EF6, который является надмножеством EF5. Вы также можете проверить это: http://msdn.microsoft.com/en-US/data/upgradeEF6 – Pawel