我们的oracle db中有很多number(5,0)的实例,其中oracle提供程序默认为Int16。这会导致问题,因为我们可以使用比int16范围中允许的值更大的值。 Oracle建议使用自定义映射覆盖edm映射(请参阅docs:https://docs.oracle.com/cd/E56485_01/win.121/e55744/entityDataTypeMapping.htm#ODPNT8300)。
我面临的问题是即使在我的asp.net mvc项目的web.config中使用这些自定义映射,覆盖也不适用。我还创建了一个全新的控制台应用程序来测试它,也没有运气。
有谁知道如何使其工作或有更好的解决方案?
(以下是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>
答案 0 :(得分:1)
我不确定这会对您的情况有所帮助,但首先使用实体框架代码,您可以使用Fluent API来配置属性。默认的Code-First约定为具有相同名称,顺序和数据类型的属性创建列。您可以覆盖此约定,如下所示。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Configure Column
modelBuilder.Entity<Student>()
.Property(p => p.DateOfBirth)
.HasColumnName("DoB")
.HasColumnOrder(3)
.HasColumnType("datetime2");
}
Fluent API的其他资源:
答案 1 :(得分:0)
您打算永远坚持使用EF 6版本吗?如果没有,因为edmx designer在7版本中被删除,你的团队可能会开始习惯于自己处理映射,而不是让设计师直接进行工作。