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.“文件”--“新建项目”-- ...
随机推荐
- react 组件积累
material-ui material-table ant-design https://ant.design/docs/react/getting-started-cn 定义组件(注意,组件的名称 ...
- 注释的HALCON的程序
*关闭窗口 dev_close_window () dev_close_window () *打开指定大小.颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, ' ...
- Extjs3.4 grid中添加一列复选框
var sm = new Ext.grid.CheckboxSelectionModel(); var cm = new Ext.grid.ColumnModel( [ sm, new Ext.gri ...
- 09 grep、正则表达式和sed
作业一:整理正则表达式博客 ^ 行首$ 行尾. 除了换行符以外的任意单个字符* 前导字符的零个或多个.* 所有字符[] 字符组内的任一字符[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)^ ...
- Lua的table库函数insert、remove、concat、sort详细介绍(转载)
函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j] ...
- RBAC权限模型——项目实战
RBAC权限模型——项目实战
- centos7防火墙的简单配置介绍
centos7版本 1.查看已开放的端口(默认不开放任何端口) firewall-cmd --list-ports 2.开启80端口 firewall-cmd --zone=public(作用域) - ...
- javascript 基本数据类型、引用数据类型
阅读目录 数据类型 两种访问方式 两种类型复制 函数参数的传递 两种变量类型检测 回到目录 数据类型 1. ECMAScript变量包含两种不同类型的值:基本类型值.引用类型值: 2. 基 ...
- sqoop命令,mysql导入到hdfs、hbase、hive
1.测试MySQL连接 bin/sqoop list-databases --connect jdbc:mysql://192.168.1.187:3306/trade_dev --username ...
- CMake入门教程(转帖)
本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...