将.NET布尔数据类型映射到实体框架中的oracle编号(1,0)时出错

将.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

将.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”的名称


是否可以使用实体框架将布尔数据类型映射到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
,然后重试