我正在使用带有oracle 10g数据库的EF 4(数据库优先,完全由它生成的模型),我遇到了一个字段的问题。
我的字段在我的数据库中定义为NUMBER(5)
。在我的模型中,EF将其定义为short
。
我的问题是我有一些大于32,767的值(最多短)
我找到了这篇文章:Entity Framework generates short instead of int。我按照指令运行,我的模型现在包含Int32值。
但我有一个新问题:
Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in type 'Model.Store.XXX'.
此错误始终显示在Visual Studio的“错误列表”选项卡中。然而,构建成功,它的一半工作:
是否有解决方案让它适用于这两种方式?
BTW,有没有办法告诉实体使用int32 for oracle INTEGER字段?它默认使用小数。修改
在逐步调配时,我发现为什么我的值为-31073。我忘了这句话:
dao.Value = (short)dto.Value;
我的两个值是int,但隐含的转换就是原点。
答案 0 :(得分:7)
我找到了如何删除错误。
我在xml模式下编辑了edmx文件,在ssdl部分找到了我的字段:
<Property Name="SIT_INSEE" Type="number" Precision="5" />
我删除了Precision="5"
,警告消失了。
答案 1 :(得分:1)
只是为了增加我的两分钱,以防其他人遇到类似的问题。我注意到,如果在web.config中将映射添加到映射中,然后从头开始重新创建edmx模型(删除它并从数据库重新生成),它就解决了其中的一些问题。简单地将值添加到web.config没有解决任何问题(可能会重新生成幕后的一些代码)。
<oracle.dataaccess.client>
<settings>
<add name="int32" value="edmmapping number(9,0)" />
</settings>
</oracle.dataaccess.client>