Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server EF到POCO-Oracle或SQL Server-数字映射/转换_Sql Server_Oracle_Entity Framework_Poco - Fatal编程技术网

Sql server EF到POCO-Oracle或SQL Server-数字映射/转换

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不兼容。如果我将概

我有一个在SQL Server或Oracle上运行的遗留数据库模式。我想为这两个数据库使用实体框架和一组POCO,因此我一直在研究分解edmx文件,并对数据使用不同的概念和物理定义

我遇到的问题是现有的数字数据,因为我无法更改数据库中的类型。SQL Server定义为浮点数,Oracle定义为数字(19,4),分别反向工程为双精度和十进制

如果我将概念模型更改为decimal(它应该适应任何一种类型),我会得到一个错误,指示Edm.decimal与SqlServer.float不兼容。如果我将概念模型保留为反向工程值,那么它会给出一个错误,指出概念类型与POCO类型不匹配(这是十进制的,因为它似乎与两个数据库都兼容)


关于如何实现这一点有什么想法吗?

我最终的解决方案是在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),它应该可以工作吗?