Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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
如何使用实体框架将Oracle编号映射为C#类型,无例外_C#_Oracle_Linq_Entity Framework 6 - Fatal编程技术网

如何使用实体框架将Oracle编号映射为C#类型,无例外

如何使用实体框架将Oracle编号映射为C#类型,无例外,c#,oracle,linq,entity-framework-6,C#,Oracle,Linq,Entity Framework 6,我们在Oracle12中有一个表(生产中为11),其中一列的类型为NUMBER,精度和比例未指定。我试图将其加载到一个十进制,但我得到了一个InvalidCastException。当然,并不是每个数字都可以放入小数,但使用的值并没有那么高: 1000 0.2777777777778 9.76944444444444 (only this value causes an exception) 277.7777777778 1 当我将这些值复制/粘贴到C#中时,没有问题: decimal th

我们在Oracle12中有一个表(生产中为11),其中一列的类型为
NUMBER
,精度和比例未指定。我试图将其加载到一个
十进制
,但我得到了一个
InvalidCastException
。当然,并不是每个数字都可以放入小数,但使用的值并没有那么高:

1000
0.2777777777778
9.76944444444444  (only this value causes an exception)
277.7777777778
1
当我将这些值复制/粘贴到C#中时,没有问题:

decimal thisWorks = 9.76944444444444m;
当我用Fluent API指定precision
HasPrecision(38,19)
时,它没有帮助。我还将Linq查询的范围缩小到了我需要的行和列

然后我决定使用
字符串
类型,这样我以后可以自己进行转换。但这会导致完全相同的异常,具有完全相同的strack跟踪。。。堆栈跟踪(已删除特定于应用程序的部分):

似乎
Oracle.ManagedDataAccess.Client
(我们使用的)也使用GetDecimal作为字符串类型

当我使用
double
作为列类型时,没有问题,但我们不想使用double。通过对列应用特定的精度,这个问题可能是最容易解决的,但是在这里更改数据库是相当困难的


是否有人知道如何在不更改数据库的情况下使用此功能?

…在所描述的情况下并非如此。1) 我的数字有16个位置,应该完全符合小数点;2) 当我想要它作为字符串值时,它会生成一个溢出。。。3) 我使用的是实体框架,而不是ADO.NET。您可以创建一个示例表的视图并将数字转换为双倍吗?在EF中,您可以在一个视图上创建一个主键,该主键被禁用以欺骗它将其视为一个表,只要您在viewODP.NET中有主键——这是典型的Oracle错误废话。看这里,N:7。他们说的是“已知问题”、“解决方法”、“强制转换”(不管是什么意思),而不是仅仅修复软件中明显的错误。我也尝试过OracleDecimal,但映射似乎不受支持。。。
Result Message: 
Test method NimbusT.UnitTests.Data.Repositories.EntityRepositories.TUnitRepositoryTest.SelectAll_Test threw exception: 
System.InvalidCastException: Specified cast is not valid.
Result StackTrace:  
at Oracle.ManagedDataAccess.Client.OracleDataReader.GetDecimal(Int32 i)
   at Oracle.ManagedDataAccess.Client.OracleDataReader.GetValue(Int32 i)
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetUntypedValueDefault(DbDataReader reader, Int32 ordinal)
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal)
   at lambda_method(Closure , Shaper )
   at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
   at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)