【问题标题】:Entity Framework - Mapping decimal(13,0) problem实体框架 - 映射小数(13,0)问题
【发布时间】:2014-05-16 05:24:58
【问题描述】:

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

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

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

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

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

在 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 命令树,EdmProperty 属性,PropagatorResult 值)
在 System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree,PropagatorResult referenceRow,PropagatorResult current,TableChangeProcessor 处理器,Boolean & rowMustBeTouched)
在 System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow,TableChangeProcessor 处理器)
在 System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler 编译器)

有人可以帮助我吗?

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

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

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

问候,

道格拉斯·阿吉亚尔

【问题讨论】:

    标签: entity-framework mapping


    【解决方案1】:

    这可能会或可能不会帮助你,但我在做同样的事情时遇到了同样的错误。所以我编辑了概念模型并将主键字段从 Int32 更改为 Decimal。到目前为止,似乎已经解决了一些问题。我仍然需要再次测试 Sql Server 并确保这没有破坏它。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多