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.“文件”--“新建项目”-- ...
随机推荐
- Jumpserver使用
堡垒机介绍 在一个特定网络环境下,为了保障网络和数据不受外界入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态.安全事件.网络活动,以便集中报警.及时处理及审计定责. 我们 ...
- myeclipse自动设置类和方法的注释(快捷键)
类的注释 第一步:找到Window→Preferences→Java→Code Style→Code Templates→Comments→Types 第二步:编辑Pattern,我一般用的模板 /* ...
- c++中字符串反转的3种方法
第一种:使用algorithm中的reverse函数 #include <iostream> #include <string> #include <algorithm& ...
- windows 2003 iis php
我的环境 是 windows server200 ee iis6.0 程序是php 1.一台安装好的 Windows 2003 服务器,并且已经安装了 IIS 6. 2.下载 windows ...
- Linux系统——硬链接与软链接
文件属性软硬连接: 链接有两种,一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link或Soft Link). 建立硬链接时,链接文件和被链接文件必须位于同一个文件系 ...
- C# 各种导入 Excel 文件的数据的方法总结
在导入之前都需要将上传的文件保存到服务器,所以避免重复的写这些代码,先贴出上传文件并保存到服务器指定路径的代码. protected void btnImport_Click(object sende ...
- 160726 smarty 笔记(1)
模板里面显示变量:1.变量要写在Smarty标记之间,变量名以$开头<{$test}>2.支持所有类的数据,包括数组(关联数组),对象关联数组在模板显示的时候,除了可以使用php语法之外, ...
- __new__方法以及TypeError: object() takes no parameters的处理
一些python书或博客将类中的__init__方法称为构造函数,而实际上这种说法是不严格的,因为创建实例的方法是__new__,实例初始化的方法是__init__.__new__方法会返回一个实例, ...
- Http协议面试题
1.说一下什么是Http协议? 对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”. 2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?(曾经去某创业公司问到) ...
- HDU - 2204 Eddy's爱好 (数论+容斥)
题意:求\(1 - N(1\le N \le 1e18)\)中,能表示成\(M^k(M>0,k>1)\)的数的个数 分析:正整数p可以表示成\(p = m^k = m^{r*k'}\)的形 ...