我在可以部署到Oracle或SQL Server数据库的系统上生成了Entity Framework模型。我已经设法让EF模型与两个DB一起工作(我有一个通用的CSDL,Oracle SSDL和SQL Server SSDL)。我有整数问题。在SQL Server中,字段可以定义为整数,但在Oracle中,它们被定义为数字(10,0),以确保可以保持最大整数。
EF为SQL Server模型生成Int32,但为Int64 for Oracle生成。我已经尝试更改CSDL以使所有这些字段成为Int64,这适用于Oracle但不适用于SQL Server。我还更改了SQL Server ssdl以使字段成为bigints。
我收到以下错误
'table'上的'propName'属性 name'无法设置为'Int32' 值。您必须将此属性设置为a “Int64”类型的非空值
我原以为在SQL Server DB上的int字段可以分配给bigint / Int64,因为没有丢失数据的可能性。
如果不改变数据库结构(我无法控制),是否有任何人和想法如何解决这个问题?
感谢。
答案 0 :(得分:1)
到Oracle的正确Int32映射是:NUMBER(9,0)。
答案 1 :(得分:0)
这可能不是您正在寻找的答案类型,但如果您使用其中一个POCO对象生成模板,您可以解决此问题(作为EF 4.0的插件提供,并包含在4.1 RC中)。这会为您的数据生成轻量级的部分类。
因为它们是部分类,所以您可以通过创建自己的部分类来添加到具有此问题的类。创建一个新属性(为了这个例子,称之为“PropName2”,虽然这显然不是一个好名字),这是一个int。在SQL Server版本的数据层中,只要有人使用新的属性就可以直接获取/设置普通的propName属性。
在Oracle版本中,您可以隐藏新属性中的Int64内容,以便使用它的人只需使用新属性并获取Int32,无论如何。
我知道这并不理想,因为每个数据库都需要一个版本的类,但它会有效地隐藏代码的其余部分。