5

我需要先使用实体​​模型将系统连接到 oracle。我有一个实体“Entity1”的模型。“MyBool”,顾名思义,它是一个布尔属性。

在此处输入图像描述

我成功地从模型生成了 sql 脚本并在 oracle 数据库上运行它。

然后我有这个代码:

static void Main(string[] args)
{
    Model1Container context = new Model1Container();
    Entity1 entity = context.Entity1.FirstOrDefault();
}

此代码引发此异常:

指定的架构无效。错误:Model1.msl(8,12):错误 2019:指定的成员映射无效。类型“Model1.Entity1”中成员“MyBool”的类型“Edm.Boolean[Nullable=False,DefaultValue=]”与“OracleEFProvider.number[Nullable=False,DefaultValue=,Precision=1,Scale=0”不兼容'Model1.Store.Entity1' 类型中成员 'MyBool' 的 ]'。

我读了很多帖子,很多人说要补充:

  <oracle.dataaccess.client>
    <settings>
      <add name="bool" value="edmmapping number(1,0)" />
    </settings>
  </oracle.dataaccess.client>

在配置文件中(在我的情况下,它是一个控制台应用程序,然后是 app.config)。但这并没有改变什么。事实上,我可以在这个参数上设置任何值,并且错误将完全相同。看起来这个参数没有被读取。

然后有人说:在项目中添加Oracle.DataAccess DLL。我这样做了,结果是一样的。

我知道有很多关于这个主题的主题,但其中任何一个都对我有帮助,我不知道还能做什么。请注意,我真正的应用程序模型已经在 Sql Server 上投入生产。

4

2 回答 2

4

在做了一些研究之后,我发现将数据库编号(1)映射到 .net bool 类型的自定义映射完全没问题。缺点当然是 2019 年的映射错误(或架构验证错误)。如果您想摆脱通常不会对解决方案造成任何问题的映射错误,请在构建期间关闭模型验证,请将“Validate On Build”设置为 false。

于 2015-11-16T15:55:27.203 回答
0

我在我的项目中使用 EF6 和 Oracle.ManagedDataAccess.Client。升级到 EF6 后,我开始在运行时遇到同样的错误。将以下块添加到 Web.Config 解决了该错误。

<oracle.manageddataaccess.client>
    <version number="*">
      <edmMappings>
        <edmNumberMapping>
          <add NETType="int16" MinPrecision="1" MaxPrecision="4" DBType="Number"/>
        </edmNumberMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>
于 2017-02-17T08:59:55.573 回答