0

У меня есть один веб-сайт, который использует EF 4.4 (версия 4.0 4.0 EF 5.0), которая использует Code First для существующей базы данных. Я использую поставщик данных Devac oracle, который требует обходного пути из-за проблем с корпусом с типом модели.Использование Code First и базы данных First Entity Framework с Devart

Это делает поставщик Devart распознавать строчные типы данных для интерпретации схемы. (Или что-то в этом роде)

Это работает должным образом, пока не попытается загрузить элемент управления на этом веб-сайте, основанный на базе базы данных EF 4.1 (также в отношении существующей базы данных). Поставщик Devart, по-видимому, делится на всех сайтах, и это приводит к ошибкам в отношении того, что провайдер не может распознавать типы данных (правильно) во всех кешках из-за предыдущего обходного пути, чтобы заставить его работать в Code First.

Есть ли обходной путь для этого, или мне нужно преобразовать подход Database First к Code First?

Редактировать: Вот соответствующий обходной код. Кажется, я потерял сообщение на форуме, из которого я получил его. Я считаю, что это было на форумах Devart:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     var config = Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfig.Instance; 
     config.Workarounds.ColumnTypeCasingConventionCompatibility = true; 

     ... initialization code here ... 

     base.OnModelCreating(modelBuilder); 
    } 

и связанные с ним ошибки является следующее:

System.Data.MetadataException: Schema specified is not valid. Errors: 
Model.ssdl(205,6) : error 0040: The Type CHAR is not qualified with a namespace or alias. Only primitive types can be used without qualification. 
Model.ssdl(206,6) : error 0040: The Type VARCHAR2 is not qualified with a namespace or alias. Only primitive types can be used without qualification. 

Есть куча больше, но они все-таки ошибка с различными линиями и типами данных ,

поставщика
+0

Вы можете сообщить об ошибке? – jackncoke

ответ

2

Devart, кажется, общие для всех сайтов

После опции ColumnTypeCasingConventionCompatibility установлена, он определяет поведение текущего домена приложения (веб-сайт). Процесс (веб-сервер) может запускать несколько доменов приложений с разными значениями ColumnTypeCasingConventionCompatibility.

Значение ColumnTypeCasingConventionCompatibility для конкретного домена приложения зависит от свойства Fluent Mapping шаблона DbContext, используемого для модели на веб-сайте. Fluent Mapping = true должно использоваться с ColumnTypeCasingConventionCompatibility = true и наоборот: Fluent Mapping = false должно использоваться с ColumnTypeCasingConventionCompatibility = false.

Вы можете установить ColumnTypeCasingConventionCompatibility для веб-сайта в следующих альтернативных способов:

а) в коде перед первым использованием контекста (например, в статическом конструкторе контексте или в главном методе ваша программа и т. д.)

b) in * .config. Например:

<configuration> 
    <configSections> 
    <section name="Devart.Data.Oracle.Entity" 
    type="Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfigurationSection, 
    Devart.Data.Oracle.Entity, Version=7.5.179.0, Culture=neutral, 
    PublicKeyToken=09af7300eec23701" /> 
    </configSections> 
    <Devart.Data.Oracle.Entity xmlns="http://devart.com/schemas/Devart.Data.Oracle.Entity/1.0"> 
    <CodeFirstOptions ColumnTypeCasingConventionCompatibility="true"/> 
    </Devart.Data.Oracle.Entity> 
</configuration> 
+0

Оказывается, что решение на самом деле было в неправильном использовании моей компанией контроля над версиями. Когда я проверил проект, значение ColumnTypeCasingConventionCompatibility устанавливалось, но мастер-проект строился на устаревшем двоичном файле с проверкой. Это реальный ответ. Он должен быть установлен для обоих, иначе он работает неправильно! – Talonj