实体框架 - 映射十进制(13,0)问题

时间:2009-11-05 13:14:12

标签: entity-framework mapping

我正在将我公司的应用程序(现在通过SQL Server和Oracle运行)迁移到ASP NET MVC和实体框架以实现持久性。

分别创建基于SQL Server数据库e的实体模型我为Oracle创建了一个SSDL(对于Oracle我使用DevArt dotConnect for Oracle Provider),我遇到了一些痛苦的麻烦。

我的表主键在SQL Server上是十进制类型(13,0)而在Oracle上是数字(13,0)但是Oracle将它的类型映射到Int64和SQL Server到十进制,但我需要SQL Server映射它到Int64。

我在实体数据模型上手动进行这些修改,对于创建记录,它工作正常,但是当我必须删除或更新某些记录时,我收到了这些错误:

指定的值不是'Edm.Decimal'类型的实例 参数名称:值

  

at System.Data.Common.CommandTrees.DbConstantExpression..ctor(DbCommandTree commandTree,Object value,TypeUsage constantType)
     在System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(DbCommandTree commandTree,EdmProperty属性,PropagatorResult值)
     在System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateEqualityExpression(DbModificationCommandTree commandTree,EdmProperty属性,PropagatorResult值)
     在System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree,PropagatorResult referenceRow,PropagatorResult current,TableChangeProcessor processor,Boolean& rowMustBeTouched)
     在System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow,TableChangeProcessor processor)
     在System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode,UpdateCompiler编译器)

有人可以帮助我吗?

为什么实体框架映射如此固定?它可以更灵活吗?

Ps。:我得到的错误,我怀疑这是因为关联。

我有一个名为省的实体和另一个名为Country的实体,我认为这些实体之间的关联在更新和删除时会导致问题。

此致

道格拉斯阿吉亚尔

2 个答案:

答案 0 :(得分:2)

这可能会或可能不会帮助你,但我做同样的事情也有同样的错误。所以我编辑了Conceptual模型并将主键字段从Int32更改为Decimal。到目前为止,似乎有固定的东西。我仍然需要再次测试Sql Server并确保它没有破坏它。

答案 1 :(得分:0)

我收到错误"指定的值不是类型' Edm.Decimal'的实例。参数名称:value"正如你在问题中发表的那样。我已将默认数据类型从Decimal更改为Int32,因为这更好地反映了真正的类型。当我第一次遇到这个错误时,我回滚了类型更改并仍然得到一个异常,但它稍微改变但导致进一步挖掘。最重要的是,在我的场景中,我们期望通过Before Insert指令在持久性期间填充PK。问题是由EF构建的域类将PK设置为0,因此触发器永远不会触发,因为传入的PK不为空。当然,EF不允许您将实体PK设置为可为空。也许这将有助于其他人。