1

在我的开发盒(Windows 7 64 位)上一切正常,我能够检索记录并保存记录。

当我部署到 Windows Server 2008(32 位)机器时,我能够检索数据并正常查看。当我要么:

1)尝试保存:

System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.ArgumentException: The specified value is not an instance of type 'Edm.Decimal'
Parameter name: value
   at System.Data.Common.CommandTrees.ExpressionBuilder.Internal.ArgumentValidation.ValidateConstant(TypeUsage constantType, Object value)
   at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(EdmProperty property, PropagatorResult value)
   at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbExpressionBinding target, PropagatorResult referenceRow, PropagatorResult current, TableChangeProcessor processor, Boolean& rowMustBeTouched)
   at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildUpdateCommand(PropagatorResult oldRow, PropagatorResult newRow, TableChangeProcessor processor)
   at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)
   --- End of inner exception stack trace ---
   at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.<ProduceDynamicCommands>d__0.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   at System.Data.Mapping.Update.Internal.UpdateCommandOrderer..ctor(IEnumerable`1 commands, UpdateTranslator translator)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.ProduceCommands()
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   --- End of inner exception stack trace ---
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   at System.Data.Entity.DbContext.SaveChanges()
   at Dashboard.Data.Repository.RepositoryBase`2.OnCompleteSave()

2)或者尝试检索序列中的下一个数字:

System.InvalidOperationException: The specified cast from a materialized 'System.Decimal' type to the 'System.Int64' type is not valid.
   at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
   at lambda_method(Closure , Shaper )
   at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
   at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at Dashboard.Data.DashboardDbContext.ExecuteScalar[TResult](String query, Object[] parameters) in c:\Builds\1\Exploration Archives\Dashboard (MAIN) (talus test)\Sources\Exploration Archives\Dashboard\Main\Dashboard.Data\Dashboard.contrib.cs:line 23
   at Dashboard.Data.Repository.RepositoryBase`2.GetNextIdFromSequence()

最让我困惑的部分是,在部署到 Windows Server 2008 机器后,部分工作正常(我能够检索数据),但只有在我尝试从序列中检索或保存时才会中断。

有什么想法可能导致这种情况吗?

4

2 回答 2

2

发现问题。

对于我的 ID 列,在我的 .NET 对象上,我使用了 data type long,并带有相应的 oracle data type number。在我的机器上运行良好。根据对此问题的其他研究,我尝试将 oracle 数据类型更改为number(19). 还是不行。

似乎long支持充其量是片状的。我必须将 .NET 对象的数据类型更改为int,并将 oracle 数据类型也更改int为。这行得通。

最困扰我的部分是它显然将numbernumber(19)视为十进制数据类型,并且对我进行缩小转换到long. 仅当我尝试保存时才出现此问题,将非缩小范围转换longdecimal. 去搞清楚。

于 2012-12-11T19:32:41.257 回答
0

在此处添加评论以供将来参考,因为此问题也会影响 Mysql 驱动程序 - EntityFramework v6 和 MySql.Data.Entities.6.8.3.0。无符号 bigint db 列会导致此问题。

“id BIGINT(20) UNSIGNED”导致“指定的值不是有效常量类型的实例。参数名称:类型”异常。更改关联的类属性 ulong 没有帮助。将 db 列“id BIGINT(20)”绑定到...

[Key]
[Column("id")]
public long Id { get; set; }

...工作正常。

于 2014-05-05T22:51:42.930 回答