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.“文件”--“新建项目”-- ...
随机推荐
- 前端开发 - JQuery - 下
二十五.jquery的事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 从HD OJ 1005想到的
杭电OJ [1005](http://acm.hdu.edu.cn/showproblem.php?pid=1005): #####Problem Description > A number ...
- 产品固件(系统)升级——curl/wget
1.文件下载指令应用 支持断点续传 curl -C - -O "https://curl.haxx.se/download/archeology/curl-7.58.0.tar.gz&quo ...
- 手把手教你使用 GitBook
一.简介 GitBook 是一个支持用 MarkDown 编写文档的软件,支持输出 HTML.PDF.eBook 格式文档.作为开发者我们一般会用它来写一些技术和接口文档. GitBook 官网:ht ...
- POJ1269:Intersecting Lines(判断两条直线的关系)
题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...
- python介绍和基础(待补充)
python的介绍 把命令放到一个文件中,文件还能执行,这样的语言叫shell脚本 写一个c语言程序,.c结尾的,gcc运行c语言程序,生成.out文件,然后执行.out文件 c语言是先编写代码,再编 ...
- 360急速浏览器JS的调试
1.代码中添加debugger关键字 2.360急速浏览器中选择工具--开发人员选项,如下图所示,在sources面板中可以看到正在运行的JS代码,F10可以单步函数执行,在鼠标放在变量上可以跟踪变量 ...
- mysql锁机制之乐观锁(二)
select for update: 在执行这个 select 查询语句的时候,会将对应的索引访问条目进行上排他锁(X 锁),也就是说这个语句对应的锁就相当于update带来的效果. select * ...
- PKU 2506 Tiling(递推+高精度||string应用)
题目大意:原题链接有2×1和2×2两种规格的地板,现要拼2×n的形状,共有多少种情况,首先要做这道题目要先对递推有一定的了解.解题思路:1.假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能 ...
- hbase(一)
1.hbase安装参考 http://blog.csdn.net/wild46cat/article/details/53214159 2.遇到的问题: ERROR: The node /hbase ...