Несколько дней назад в своем последнем проекте я работал над Oracle 11g и ODAC beta для EF4.Я сталкивался с множеством проблем, связанных с его использованием: ни одна функция не может получить к ней доступ, работа с Stored Prodedure великолепна и проста до тех пор, пока вы не вернете какое-либо значение из нее, тогда вам придется использовать RefCusrose, в представлении вы должны указать первичный ключ ичто вы указываете отображение числовых полей (1,0) на логическое значение, и большинство полей отображаются в десятичном формате.
Я обнаружил, что форум Oracle очень полезен здесь, в форме оракула люди дали три предложения, чтобы решить его, я как он все это цитирует ..
1,В файлах .Config устанавливаются переменные
В ODAC EF Beta 2 по умолчанию номер (1, 0) будет сопоставлен с Edm.Int16.Вы можете указать в app.config или web.config для сопоставления Number (1, 0) с Edm.Boolean.
Следующая информация относится к будущей бета-версии 2:
Отображение по умолчанию для типов Oracle NUMBER (p, 0) может быть переопределено на основе настраиваемого сопоставления, которое можно настроить в app.config, web.config или machine.config.
Например, , по умолчанию NUMBER (1, 0) сопоставляется с Int16.Однако пользователи могут захотеть сопоставить NUMBER (1, 0) с типом .NET Bool или .NET Byte.Это можно сделать с помощью файла конфигурации.
Ниже приведен пример app.config, который содержит настраиваемое сопоставление, в котором NUMBER (1, 0) сопоставляется с Bool, NUMBER (3,0) сопоставляется с байтоми максимальные значения точности для Int16, Int32, Int64 изменяются на 4, 9, 18 по сравнению со значениями по умолчанию 5, 10, 19 соответственно:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
<add name="byte" value="edmmapping number(3,0)" />
<add name="int16" value="edmmapping number(4,0)" />
<add name="int32" value="edmmapping number(9,0)" />
<add name="int64" value="edmmapping number(18,0)" />
</settings>
</oracle.dataaccess.client>
</configuration>
2.Статический класс Для конвертации:
namespace convert{
static class boolConvert
{
public static bool boolchar(char ON)
{
switch (ON)
{
case 'O':
return true;
case 'N':
return false;
default:
return true;
}
}
public static char charbool(bool ON)
{
switch (ON)
{
case true:
return 'O';
case false:
return 'N';
default:
return 'O';
}
}
}
}
, тогда вы можете использовать его для конвертации, где это необходимо: bool isSomthing = convert.boolConvert.boolchar ('N');char isSomthigEelse = convert.boolConvert.charbool (true);
3.Использование свойства Если вы используете POCO
Если вы используете один из генераторов кода, который генерирует POCO, вы можете добавить свойство в частичный класс.Если у вас есть поле с именем «MyField», то в частичный класс добавьте что-то вроде этого:
public bool MyField_Boolean
{
get
{
return MyField == 'O';
}
}
Вы не сможете использовать MyField_Boolean внутри запроса EF Linq (поскольку это не свойство базы данных) но где-нибудь еще в вашем коде вы можете использовать его, чтобы получить булеву версию.
Хотя я еще не тестировал ни одну из них, но, возможно, это решит вашу проблему.Я надеюсь, что в следующей версии ODAC таких проблем не будет.