我正在考虑使用EF访问安装在客户系统上的传统SQL Server数据库。实体框架是否支持模型中的不同数据类型?
问题是数据库模式不是100%一致的:虽然它们都具有相同的(相关的)表和字段,但某些数字字段可能具有不同的数据类型。
就我所见,从应用程序的角度来看,类型是“兼容的”:例如,一个包含小数字的字段可能是客户A的数据库上的smallint
,但是客户B的数据库上的int
或包含价格的字段可能是A的数据库上的decimal(10,2)
,而B的数据库上是float
(是的,这意味着B可能遭受损失从浮点问题 - 毕竟这是一个遗留数据库)。
因为我们不是唯一访问数据库的人,所以更改(并因此统一)模式不是一种选择。实体框架是否能够应对这种情况(即,如果模型定义声明它是decimal(10,2)
,它会优雅地接受SQL Server表中的double
)还是会崩溃?
您是否尝试过测试:在具有这些差异的几个测试数据库中指向相同的模型?记住这些数据可能会有所作为(例如,小数部分的小数值可能会起作用,而小数部分的小数部分则会失效)。 – Richard
@理查德:还没有,如果没有人能提供权威的答案,那就是我计划要做的事。如果我测试它并且它可以正常工作,我仍然不知道它是否“应该这样工作”,或者它“由于EF的一些实现细节而巧合工作”。 – Heinzi
确实,“看起来有效”的结果不是确定的(但你也不会在这里得到)。然而,“它不起作用”的结果将是。因此,您可以提出真正的问题:在这种情况下如何适应/使用EF(因为不管“官方”职位是什么,所有可能的映射都会自动支持,因此您需要该问题)。 – Richard