【问题标题】:Mapping Boolean property to Oracle using Entity Framework使用实体框架将布尔属性映射到 Oracle
【发布时间】:2013-10-14 12:31:57
【问题描述】:

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

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

然后我有这个代码:

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

这段代码抛出了这个异常:

指定的架构无效。错误:Model1.msl(8,12):错误 2019: 指定的成员映射无效。方式 成员“MyBool”的“Edm.Boolean[Nullable=False,DefaultValue=]”类型 'Model1.Entity1' 不兼容 '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 上投入生产。

【问题讨论】:

  • 我将列类型更改为整数而不是布尔。在实体模型类(我首先使用代码)中,我创建了一个布尔属性,在 setter 和 getter 方法中,我将整数属性转换为 bool(然后我不必更改其他应用程序层)。它并不漂亮,但它确实有效。

标签: c# sql oracle entity-framework ef-model-first


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我在我的项目中使用 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>
    

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2017-09-20
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多