Oracle Managed Dataacess EF6 自定义 edm 映射不适用
Posted
技术标签:
【中文标题】Oracle Managed Dataacess EF6 自定义 edm 映射不适用【英文标题】:Oracle Managed Dataacess EF6 custom edm mappings not applying 【发布时间】:2016-06-25 07:45:56 【问题描述】:我们的 oracle 数据库中有很多 number(5,0) 实例,其中 oracle 提供程序默认为 Int16。这会导致一个问题,因为我们可以有一个比 int16 范围内允许的更大的值。 Oracle 建议使用自定义映射覆盖 edm 映射(请参阅文档:https://docs.oracle.com/cd/E56485_01/win.121/e55744/entityDataTypeMapping.htm#ODPNT8300)。
我面临的问题是即使在我的 asp.net mvc 项目的 web.config 中使用这些自定义映射,覆盖也没有应用。我还创建了一个全新的控制台应用程序来测试这一点,也没有运气。
有谁知道如何使它工作或有更好的解决方案?
我可能应该添加此信息,
来自 NuGet 的 VS 2015 EF6 Oracle 托管数据访问最新版本 我知道文档说您可以手动编辑表映射中的类型 但是当您尝试更改它们时,它与 emd 模型冲突并且 产生错误。 手动编辑 xml 的解决方法 去除精度在短期内是好的,但每次你必须 从数据库更新它会覆盖更改。这是一件苦差事,因为我有 部分表格40多个条目待编辑(下面是web.config/app.config中的入口)
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="3" />
<add name="int16" precision="4" />
<add name="int32" precision="9" />
<add name="int64" precision="18" />
</edmMapping>
</edmMappings>
<dataSources>
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
</dataSources>
</version>
【问题讨论】:
【参考方案1】:我不确定这对您的情况有帮助,但是首先使用实体框架代码,您可以使用 Fluent API 来配置属性。默认代码优先约定为具有相同名称、顺序和数据类型的属性创建列。您可以覆盖此约定,如下所示。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
//Configure Column
modelBuilder.Entity<Student>()
.Property(p => p.DateOfBirth)
.HasColumnName("DoB")
.HasColumnOrder(3)
.HasColumnType("datetime2");
有关 Fluent API 的其他资源:
entityframeworktutorial
msdn.microsoft
【讨论】:
很高兴我能帮上忙。【参考方案2】:您打算永远坚持使用 EF 6 版本吗?如果没有,由于 edmx 设计器在 7 版本中被删除,也许您的团队应该开始习惯于自己处理映射而不是让设计器直接完成工作。
【讨论】:
以上是关于Oracle Managed Dataacess EF6 自定义 edm 映射不适用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const