将.NET布尔数据类型映射到实体框架中的oracle编号(1,0)时出错
将.NET布尔数据类型映射到.edmx文件中的oracle编号(1,0)会引发以下错误 错误:指定的成员映射无效。类型 中成员“COLUMN123”的“Edm.Boolean[Nullable=False,DefaultValue=]” 类型“DBModel.TABLE123”与不兼容 'OracleEFProvider.number[Nullable=False,DefaultValue=,精度=1,刻度=0]' “DBModel.Store.TABLE123”类型中的成员“CHECK_INSTALLATION”的名称将.NET布尔数据类型映射到实体框架中的oracle编号(1,0)时出错,.net,entity-framework,.net,Entity Framework,将.NET布尔数据类型映射到.edmx文件中的oracle编号(1,0)会引发以下错误 错误:指定的成员映射无效。类型 中成员“COLUMN123”的“Edm.Boolean[Nullable=False,DefaultValue=]” 类型“DBModel.TABLE123”与不兼容 'OracleEFProvider.number[Nullable=False,DefaultValue=,精度=1,刻度=0]' “DBModel.Store.TABLE123”类型中的成员“CHECK_INS
是否可以使用实体框架将布尔数据类型映射到oracle的编号(1,0)?下面是包含自定义映射的app.config示例,其中 数字(1,0)映射到Bool,数字(3,0)映射到Byte,并且 Int16、Int32、Int64的最大精度从 默认值分别为5、10、19:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
<add name="byte" value="edmmapping number(3,0)" />
<add name="int16" value="edmmapping number(4,0)" />
<add name="int32" value="edmmapping number(9,0)" />
<add name="int64" value="edmmapping number(18,0)" />
</settings>
</oracle.dataaccess.client>
</configuration>
同样,您可以将.net bool映射到Oracle编号(1,0)添加Oracle.dataaccess.client部分对我来说是不够的。以下内容(摘自)确实有效:
<configuration>
<configSections>
<section name="oracle.dataaccess.client" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
...
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
</settings>
</oracle.dataaccess.client>
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1"/>
<add name="byte" precision="2" />
<add name="int16" precision="5" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
...
使用VS 2012、EF5和Oracle 11以及oraclManageDataAccess 12.1,我可以使用此配置。
数字1 not null已转换为位
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<connectionStrings>
</connectionStrings>
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="2" />
<add name="int16" precision="5" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
</configuration>
我在复制用于新项目的解决方案时出错,因此我将非托管oracle驱动程序更改为托管oracle驱动程序,然后问题就消失了,但当我发布到服务器时,服务器上没有安装托管oracle驱动程序,因此我不得不更改回非托管oracle驱动程序。当然,问题又来了,所以我转到服务器资源管理器,验证我是否可以连接到oracle源代码(使用非托管驱动程序),然后打开edmx文件,右键单击并单击“验证”,仍然在错误列表上显示错误,然后我只需右键单击并单击“从数据库更新模型”,验证表是否列在“刷新”选项卡中,然后单击“完成”,更新需要一段时间才能完成,但完成后错误消失了
我相信在尝试使用web.config和app.config文件中的非托管驱动程序设置,但连接到服务器资源管理器中的托管驱动程序(edmx“从数据库更新模型”操作使用的连接)时,会出现此错误,反之亦然。在VS 2015中遇到此错误。项目将无错误地编译,但错误列表仍将显示此错误。 将以下部分添加到my app.config以解决此问题。 请注意,edmMapping元素与oracle提供的XSD模式不兼容(因此,如果您的配置文件处于打开状态,您会收到一条警告),但这仍然比显示这些错误要好
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
<add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" />
</edmNumberMapping>
<edmMapping dataType="number">
<add name="bool" precision="1"/>
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
您使用的是什么版本的Oracle Provider?ODN()中有一个很长的线程,人们在其中讨论各种Beta的类似问题、陈旧assembly.congif文件的问题等,这些问题在最终版本中得到了解决。将以下设置添加到我的应用程序配置文件中可以消除编译时错误,并且应用程序运行良好。然而,当我关闭.edmx文件后打开.edmx文件时,VisualStudio有时仍会显示此错误。错误消失了。而且,在最终版本中,似乎还没有修复对额外映射的需要。顺便说一句,我注意到前面的链接不起作用,人们应该试试这个链接。至于VS错误,您对此无能为力。错误列表中似乎有一个bug,它会导致旧的错误消息出现,即使这些错误消息已被修复。完整编译通常会清除它们。这不是特定于EDMX的,我一直都遇到这个问题。可能的重复我只在我使用EF5模型的项目中添加了配置设置。在编译这个项目时没有错误,我在同一个解决方案中编译其他项目时遇到了很多错误。我发现,我必须将app.config复制到链接到EF5模型项目的每个项目中,以消除编译器错误。从去年12月开始,我在Oracle Managed Data Access 12.1的最后一个版本中使用VS 2012。当我想要构建时,这对我来说非常有效——但我注意到在.config中,EF不允许我再更新EDM设计器。它会认为我有一个不兼容的数据提供者。删除区块,让我再次在设计器模式下编辑。太奇怪了。而且,我可以清理解决方案,直接构建项目,没有错误,然后构建解决方案——没有问题。如果我清洁并构建解决方案,EF项目会对我咆哮。在解决方案的其余部分之前,我必须记住重新注释/取消注释.config或构建EF项目。与Jason相同。我认为这是因为Visual Studio的错误列表中有一个错误,因为项目构建得很好,但取决于我是构建解决方案还是项目,错误是否会显示出来。现在使用Oracle.ManagedDataAccess
您不需要anything@Toolkit,实际上,我在Oracle.ManagedDataAccess v4.122.1的设计时仍然会弹出错误。0@BasselShmali我建议您执行一个干净的测试项目,安装最新版本的Oracle.ManagedDataAccess
,然后重试