Sql server EF到POCO-Oracle或SQL Server-数字映射/转换
我有一个在SQL Server或Oracle上运行的遗留数据库模式。我想为这两个数据库使用实体框架和一组POCO,因此我一直在研究分解edmx文件,并对数据使用不同的概念和物理定义 我遇到的问题是现有的数字数据,因为我无法更改数据库中的类型。SQL Server定义为浮点数,Oracle定义为数字(19,4),分别反向工程为双精度和十进制 如果我将概念模型更改为decimal(它应该适应任何一种类型),我会得到一个错误,指示Edm.decimal与SqlServer.float不兼容。如果我将概念模型保留为反向工程值,那么它会给出一个错误,指出概念类型与POCO类型不匹配(这是十进制的,因为它似乎与两个数据库都兼容)Sql server EF到POCO-Oracle或SQL Server-数字映射/转换,sql-server,oracle,entity-framework,poco,Sql Server,Oracle,Entity Framework,Poco,我有一个在SQL Server或Oracle上运行的遗留数据库模式。我想为这两个数据库使用实体框架和一组POCO,因此我一直在研究分解edmx文件,并对数据使用不同的概念和物理定义 我遇到的问题是现有的数字数据,因为我无法更改数据库中的类型。SQL Server定义为浮点数,Oracle定义为数字(19,4),分别反向工程为双精度和十进制 如果我将概念模型更改为decimal(它应该适应任何一种类型),我会得到一个错误,指示Edm.decimal与SqlServer.float不兼容。如果我将概
关于如何实现这一点有什么想法吗?我最终的解决方案是在POCO中有两个字段,一个用于处理Oracle,另一个用于SQL Server。由于应用程序的平衡部分(主要是C++)使用浮点,因此代码使用SQL Server字段,而Oracle字段仅转换为SQL字段,用于检索和保存到数据库。在Oracle数据模型中,该字段在逻辑模型中重命名,以便使用转换
public double Value { get; set; }
private decimal ValueDecimal
{
get{ return (decimal) Value;}
set{ Value = (double) value;}
}
不一定优雅,但我可以使用模型中的模板生成它,它可以工作…十进制和浮点两种方式都不相等,每种方式都有它们存储的数字,而另一种类型则不能。无论如何,其中一种类型必须适合存储在其中的数据,因此您是否尝试过在存储模型中更改该类型?我不相信EF会在初始创建后检查它,所以您可以将存储部分中的SQL数据类型更改为decimal(19,2),它应该可以工作吗?