实体框架 oracle,实体框架-具有实体框架代码优先和oracle提供程序的布尔类型

在必须在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值