在必须在oracle和sqlServer中工作的应用程序中工作.在SqlServer中,我们使用“位”存储布尔值,在oracle number(1)中使用.
如果发现映射到数据库字段的布尔属性很少,我们已经创建了代码优先模型.
例如:
public partial class ZPruebaBooleano
{
public int Numero { get; set; }
public bool Booleano { get; set; }
}
映射为:
this.ToTable("ZPRUEBABOOLEANO", schema);
this.HasKey(t => t.Numero);
this.Property(t => t.Numero).HasColumnName("NUMERO");
this.Property(t => t.Booleano).HasColumnName("BOOLEANO");
另外,将sw添加到应用程序配置文件中(为简单起见,我们在不使用任何其他dll的情况下对其进行了测试):
我相信提供者工厂在创建模型时会读取它,因为如果我在文件中映射的任何类型名称中添加无效条目,都会引发异常.
正如我在其他论坛中发现的那样,这应该有效.但是现在我不确定是否应该一直工作,包括首先编写代码.
我执行代码时遇到此异常(从西班牙语翻译,对不起任何错误):
Type ‘Edm.Boolean[Nullable=False,DefaultValue=]’ from ‘Booleano’ to
type’PruebaBooleanos.ZPruebaBooleano’ is not compatyble with
‘OracleEFProvider.number[Nullable=False,DefaultValue=,Precision=38,Scale=0]’
有趣的是说Precision = 38.数据库是Number(1),我对此很确定,实际上这是脚本:
CREATE TABLE ZPRUEBABOOLEANO
(
NUMERO NUMBER(15),
BOOLEANO NUMBER(1)
)
另外,我发现有趣的是,即使我没有通知我正在映射的表,我也犯了这个错误,就像oracle提供程序甚至没有检查列是否为number(anything).现在,已经很好地映射了表和架构.
我已经测试过创建一个由布尔值包装的整数属性,正如我们在这段代码中看到的那样.
namespace PruebaBooleanos
{
public partial class ZPruebaBooleano
{
public int Numero { get; set; }
public bool Booleano
{
get
{
return iBooleano == 1 ? true : false;
}
set
{
iBooleano = value ? 1 : 0;
}
}
public int iBooleano { get; set; }
}
}
在这最后一种情况下,我忽略了布尔值并映射了整数.
在甲骨文中还可以.但是增加了两个问题:
>在SqlServer中失败,因为在sql server中位
>无法使用布尔属性查询实体模型,因为它没有映射到数据库.
我可以将SqlServer中的位字段更改为Number.
但我想保留sqlserver中的位和oracle中的number(1).
有人有类似的问题吗?
我愿意接受任何想法,谢谢!!!
o