我正在将 EF 4(数据库优先,完全由它生成的模型)与 Oracle 10g 数据库一起使用,并且我在一个字段上遇到问题。
我的字段定义为NUMBER(5)
在我的数据库中。在我的模型中,EF 将其定义为short
。
我的问题是我有一些值大于 32,767(短路的最大值)
我找到了这篇文章:实体框架生成short而不是int https://stackoverflow.com/questions/12339918/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 的“错误列表”选项卡中。然而,构建成功,就成功了一半:
- 读取数据库中的值
- 写入一个值不起作用:99999 被转换为-31073(参见编辑)
有没有办法让它双向工作?
顺便说一句,有什么方法可以告诉实体对 oracle INTEGER 字段使用 int32 吗?它默认使用十进制。
EDIT
在一步步调试的过程中,我发现了为什么我的值为-31073。我忘记了这一行:
dao.Value = (short)dto.Value;
我的两个值都是int,但简而言之,隐式转换就是起源。