前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Entity Framework 6.x Code Frist For Oracle 实践与注意点

Entity Framework 6.x Code Frist For Oracle 实践与注意点

作者头像
阿新
发布2018-04-12 09:49:55
1.1K0
发布2018-04-12 09:49:55
举报
文章被收录于专栏:c#开发者c#开发者

Entity Framework 6.x Code Frist For Oracle 实践与注意点

开发环境

Visual Studio.net 2015/2017

Oracle 11g/12c 数据库

Oracle Client 可以不安装

Asp.net mvc Project

Nuget 组件

  • EntityFramework 6.1.3
  • Oracle.ManagedDataAccess 12.1.2400
  • Oracle.ManagedDataAccess.EntityFramework 12.1.2400

Entity Framework web.config配置

通过nuget安装以上3个组件后,visual studio.net会自动修改web.config的配置信息,会添加以下内容

<configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </configSections>

<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </providers> </entityFramework>

<system.data> <DbProviderFactories> <remove invariant="Oracle.ManagedDataAccess.Client" /> <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> </DbProviderFactories> </system.data>

<oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.20.70.242)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))" /> </dataSources> </version> </oracle.manageddataaccess.client> <connectionStrings> <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=C##EF1;Password=ef1;Data Source=SampleDataSource" /> </connectionStrings>

有了oracle.manageddataaccess.client就不需要安装Oracle客户端了,descriptpor修改成需要连接的Oracle数据库实例就可以了

创建Model/DbContext

public class Blog { public int BlogId { get; set; } [MaxLength(50)] public string Url { get; set; }   }

public class MyDbContext: DbContext { public MyDbContext() : base("Name=OracleDbContext") {   Database.SetInitializer<MyDbContext>(null); } public DbSet<Blog> Blogs { get; set; }   public DbSet<Post> Posts { get; set; }   protected override void OnModelCreating(DbModelBuilder modelBuilder) { //注意:Oracle必须定义成用户名/所有者或是称Schema,(SQL默认是dbo) modelBuilder.HasDefaultSchema("C##EF1"); //注意:Oracle必须把所有mapping的字段名转换成大写,否则无法在pl/sql developer中用sql查询 modelBuilder.Properties().Configure(x => x.HasColumnName(x.ClrPropertyInfo.Name.ToUpper())); //注意:Oracle必须把所有mapping的数据库表名转换成大写,否则无法在pl/sql developer中用sql查询 modelBuilder.Types().Configure(c => c.ToTable(c.ClrType.Name.ToUpper())); //注意:如果字段名是string类型再没有设定MaxLength/Type属性的情况下默认给250长度/NVARCHAR2类型,否则系统会自动创建成NCLOG类型 modelBuilder.Properties<string>().Configure(c => c.HasMaxLength(250)); modelBuilder.Properties<string>().Configure(c => c.HasColumnType("NVARCHAR2")); }   }

protected override void OnModelCreating(DbModelBuilder modelBuilder) 可以设定非常多自定义属性,比如ID/主键/一对多/级联删除/命名规则等,具体可以参考以下内容

Entity Framework Fluent API - Configuring and Mapping Properties and Types

Entity Framework Custom Code First Conventions (EF6 onwards)

创建表/同步更新表结构

执行Code first 命令

  • Run the Enable-Migrations command in Package Manager Console
  • Add-Migration will scaffold the next migration based on changes you have made to your model since the last migration was created
  • Update-Database -script will apply any pending migrations to the database

注意:Update-Database -script 系统会生成数据库的DDL脚本,这样可以方便做一些调整后再执行更新到数据库

如果需要多个库(开发库/测试库/生产库)同步更新就可以通过修改脚本来实现

推荐nugate组件

PM> Install-Package Z.EntityFramework.Plus.EF6

PM> Install-Package Z.EntityFramework.Plus.EFCore

PM> Install-Package Z.ExtensionMethods 

都是非常好用的扩展类库

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开发环境
    • Entity Framework web.config配置
      • 创建Model/DbContext
      • Entity Framework Fluent API - Configuring and Mapping Properties and Types
      • Entity Framework Custom Code First Conventions (EF6 onwards)
        • 创建表/同步更新表结构
          • 推荐nugate组件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档