Entity Framework 基于Oracle的code first 问题汇总
1. 在code first 在数据库中建表时,需要指定schema, 默认是dbo, 需要改成我们的oracle登录名
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("BMI14"); base.OnModelCreating(modelBuilder);
}
2. 默认情况下,实体类名就是表名可以通过DataAnnotations进行修改,可以通过FluentAPI 进行修改
[Table("TD_SM_BILL")]
public class TdSmBill : Entity
{
}
3. 默认情况下,我们的实体字段类型如果是string, 那么生成在数据库对应字段的类型为nclob,这是我们不能接受的,需要修改,原理同上。
[Table("TD_SM_BILL")]
public class TdSmBill : Entity
{
/// <summary>
/// 分区字段 设置数据库中areacode长度为32
/// </summary>
[StringLength(ShConsts.StringLength_32)]
public string AreaCode { get; set; }
}
如果每个string类型的属性都加上这个,我们肯定要疯掉了,我找到一种简单的方式,不需要在每个属性上加注解:
这里我默认string类型的长度为100,这样在数据库中长度就为100,当然并不是每一个数据字段都是100,这里就需要结合注解来灵活配置了。
public class StringMaxLengthConvertion: Convention
{
public StringMaxLengthConvertion()
{ this.Properties().Having(p => p.PropertyType)
.Configure((c,a) => {
if (a.FullName.EndsWith("String"))
{
c.HasMaxLength();
}
});
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("DEV"); modelBuilder.Conventions.Add<StringMaxLengthConvertion>();
modelBuilder.Conventions.Add<ColumnUpperConvertion>();
base.OnModelCreating(modelBuilder);
}
4. code first生成的建表语句如下:
create table "BMI14"."TB_HOSPITAL"
(
"Id" number(10, 0) not null,
"Name" nvarchar2(32) null,
constraint "PK_TB_HOSPITAL" primary key ("Id")
)
表名,字段都加了引号,这让我们在plsql中使用时要特意注意,不能随意的大小写混用了,且注意要加上引号才能识别,否则会报错:无法识别标识符。
这里有三种解决方案:
1). 使用注解,如2中的解决方案一样,使用table或column来标识
2) 干脆表名和属性名全大写,这样生成时也就是大写的,就是有些别扭。
3) 使用fluentAPI:
modelBuilder.Properties<string>()
.Configure(c => c.HasMaxLength()); modelBuilder.Properties<string>()
.Where(x => x.Name == "Name")
.Configure(c => c.HasMaxLength());
4) 解决方法同3. 参考:https://msdn.microsoft.com/en-us/data/jj819164.aspx
public class ColumnUpperConvertion: Convention
{
public ColumnUpperConvertion()
{
this.Properties().Configure(a=>a.HasColumnName(a.ClrPropertyInfo.Name.ToUpper()));
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("DEV"); modelBuilder.Conventions.Add<StringMaxLengthConvertion>();
modelBuilder.Conventions.Add<ColumnUpperConvertion>();
base.OnModelCreating(modelBuilder);
}
未完。。。
Entity Framework 基于Oracle的code first 问题汇总的更多相关文章
- [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)
近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...
- 让ADO.NET Entity Framework支持Oracle数据库
Oracle最近发布了 Oracle Data Access Component(ODAC)11. 2 Rel 4,其中增加了对 Entity Framework 4.1 和4.2的支持.这让 .NE ...
- 使用entity framework开发oracle
A.vs2010 SP1 B.ODAC(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html) ...
- .NET Entity Framework (with Oracle ODP.NET) -Code First
上一篇文章介绍了.NET Entity Framework ,并演示了Model First模式,本文将继续讨论 Code First 模式的实现. 一.摘要 1.目标 本文验证了通过Oracle D ...
- .NET Entity Framework (with Oracle ODP.NET)
一.前言 1.Entity Framework是什么? Entity Framework是微软对ORM框架的实现.类似的实现也有其它方式,如DevExpress 的XPO(eXpress Persis ...
- Entity Framework 基于方法的查询语法
实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...
- Entity Framework With Oracle
参考页面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.htm ...
- Entity Framework With Oracle(转)
虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...
- MVC中使用Entity Framework 基于方法的查询学习笔记 (一)
EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...
随机推荐
- URL地址中的字符串转换
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,怎么解决?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- Linux内核中namespace之PID namespace
前面看了LInux PCI设备初始化,看得有点晕,就转手整理下之前写的笔记,同时休息一下!!~(@^_^@)~ 这片文章是之前写的,其中参考了某些大牛们的博客!! PID框架的设计 一个框架的设计会考 ...
- windows中的进程和线程
今天咱们就聊聊windows中的进程和线程 2016-09-30 在讨论windows下的进程和线程时,我们先回顾下通用操作系统的进程和线程.之所以称之为通用是因为一贯的本科或者其他教材都是这么说的: ...
- myeclipse中更改web项目在tomcat中部署的路径
右键点击项目名称,选择属性properties,选择myeclipse->web.更改web context-root就可以.
- boost enable_shared_from_this
关于shared_ptr和weak_ptr看以前的:http://www.cnblogs.com/youxin/p/4275289.html The header <boost/enable_s ...
- PEP8编码规范
1.代码布局设计 1.1 缩进 -4个空格进行缩进 1.2 tab键-在python2中tab和空格是混用的,但是在python中基本上使用tab(pycharm开发工具会自动对代码缩进) 1.3 最 ...
- js自动类型转换
<script> testeq0 = null == undefined; testeq1 = "0" == 0; //比较前字符串转换为数字 testeq2 = 0 ...
- ElasticSearch recovery过程源码分析
[ES版本] 5.5.0 [分析过程] 找到Recovery有6种状态 public class RecoveryState implements ToXContent, Streamable { p ...
- C++之旅(第一天)
基础知识 完全支持C语言 可以在C++引入C的头文件 #include <stdio.h> #include <iostream> int main() { } 输入和输出 C ...
- python的socket网络编程(二)
(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 国庆八天假,已过去3天了,加上明天又是中秋,还是决定在今晚把之前想写的东西写完.国庆节在宁波老家,吃好喝好睡好,就是没有好好 ...