将.NET布尔数据类型映射到实体框架中的oracle数字(1,0)会引发错误

时间:2012-02-01 12:19:43

标签: .net entity-framework

将.NET布尔数据类型映射到.edmx文件中的oracle数字(1,0)会引发以下错误。

  

错误2019:指定的成员映射无效。类型   成员'COLUMN123'的'Edm.Boolean [Nullable = False,DefaultValue =]'   类型'DBModel.TABLE123'与。不兼容   'OracleEFProvider.number [可空=假,默认值=精密= 1,标度= 0]'   类型'DBModel.Store.TABLE123'中的成员'CHECK_INSTALLATION'。

可以使用实体框架将布尔数据类型映射到oracle的数字(1,0)吗?

5 个答案:

答案 0 :(得分:7)

添加oracle.dataaccess.client部分对我来说还不够。以下内容(摘自Deploying and Configuring ODP.NET to work without installation with Entity Framework)确实有效:

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

答案 1 :(得分:1)

下面是app.config的示例,其中包含自定义映射 NUMBER(1,0)映射到Bool,NUMBER(3,0)映射到Byte,而 Int16,Int32,Int64的最大精度从4变为4,9,18 默认值分别为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 Number(1,0)

答案 2 :(得分:1)

此配置适用于我使用VS 2012,EF5和Oracle 11以及oraclManageDataAccess 12.1。 NUMBER 1 not null转换为bit。

<?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>

答案 3 :(得分:1)

VS 2015中出现此错误。项目编译时没有错误,但错误列表仍会显示此错误。 将以下部分添加到我的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>

答案 4 :(得分:0)

当我复制一个用于新项目的解决方案时,我得到了错误,所以我从非托管的oracle驱动程序更改为托管的oracle驱动程序,然后问题就消失了,但是当我发布到服务器时,服务器做了没有安装托管的oracle驱动程序,所以我不得不改回非托管的oracle驱动程序。问题当然回来了,所以我去了服务器资源管理器并验证我可以连接到我的oracle源代码(使用非托管驱动程序),然后我打开edmx文件并右键单击并单击验证哪些仍显示错误错误列表,然后我只需右键单击并从数据库中单击更新模型,验证表已在刷新选项卡中列出,然后单击完成,更新完成需要一段时间,但完成后错误消失了。

我相信在尝试使用web.config和app.config文件中的非托管驱动程序设置但连接到服务器资源管理器中的托管驱动程序(这是edmx&更新的连接)时会出现此错误数据库中的模型&#39;动作使用),反之亦然。