Oracle中使用Entity Framework 6.x Code-First方式开发
去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版):
1.Using NuGet to Install and Configure Oracle Data Provider for .NET
2.Entity Framework Code First and Code First Migrations for Oracle Database
基本上照着做就行了,为了方便不愿意啃英文的朋友,把主要步骤"意译"了下:
环境: Visual Studio 2013 + .Net Framework 4.5.2
1. 使用NuGet安装、配置ODP.NET
a) 参考下图,创建一个Console Application的项目
项目名称随便吧,图中是NuGet
这是主程序入口
b) 打开Solution 视图
项目的References引用节点右击,选择Manage NuGet Packages...
参考下图,搜索Oracle,安装图中的二项:
安装过程中,会弹出License对话框,点击I Accept
安装成功后,这二项应该会自动打上绿勾
安装完成后,会自动打开readme.txt,地球人一般都不看这玩意儿
检查下项目的References,参考下图,应该看到自动添加了4个新的dll引用
再看下App.config
会自动添加以下内容:
下图这二个地方,是用来配置连接字符串的,记得修改
ok, ODP.Net安装配置完成
2.使用Code First模式开发
a) 先参考下图,修改连接字符串(本文用的是HR这个示例用户,大家可以根据实际情况修改)
打开Program.cs这个文件
换成下面这段代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Migrations;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations.History;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace EFCodeFirst
{
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseAlways<OracleDbContext>()); using (var ctx = new OracleDbContext())
{
var emp = new Employee
{
Name = "Tom",
HireDate = DateTime.Now
}; ctx.Employees.Add(emp);
ctx.SaveChanges(); var dept = new Department
{
Name = "Accounting",
ManagerId = emp.EmployeeId
}; ctx.Departments.Add(dept);
ctx.SaveChanges();
} Console.Write("Press any key to continue... ");
Console.ReadLine();
}
} public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public DateTime HireDate { get; set; }
//public string Location { get; set; }
} public class Department
{
public int DepartmentId { get; set; }
public string Name { get; set; }
[ForeignKey("Manager")]
public int ManagerId { get; set; }
public Employee Manager { get; set; }
} public class OracleDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Department> Departments { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("HR");
}
}
}
下面是主要的调用代码,演示了insert记录
下面是实体类的定义,完全是POJO对象,可以借助工具或纯手写.
下面是DbContext部分,相当于DAL层.注意:OnModelCreating,这里表示根据Model创建表时,默认将创建到HR这个Database Schema下
运行结果
打开Server Explorer面板
连接到Oracle
可以看到根据Model定义,自动生成了二张表(注意下表名,自动加了复数)
可以直接查看数据
可以看到,成功插入了2条数据
b) Model与数据库的迁移合并
数据实体模型的类定义,往往随着需求的变化而变化,如果增加或减少了属性,EF可以自动生成相应的db脚本,同步修改表结构
先参考下图,进入PM控制台
输入Enable-Migrations启用数据库迁移功能
然后将Employee的类定义,把原来注释掉的Location属性行,去掉注释(即:增加了Location属性)
回到PM控制台,输入Add-Migration First 生成相应的db修改脚本
最后输入Update-Database更新表结构
打开Server Explorer视图,查看下Employees表
可以发现,已经增加了新字段Location
Oracle中使用Entity Framework 6.x Code-First方式开发的更多相关文章
- 在Oracle中使用Entity Framework 6 CodeFirst
项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...
- Oracle中使用Entity Framework 6.x Code-First
Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...
- 如何使用ASP.NET Web API OData在Oracle中使用Entity Framework 6.x Code-First方式开发 OData V4 Service
环境: Visual Studio 2013 + .Net Framework 4.5.2 1.新建项目 2.安装OData,ODP.NET 安装的包: 下面是部分代码: using System; ...
- Entity Framework 6.x Code Frist For Oracle 实践与注意点
Entity Framework 6.x Code Frist For Oracle 实践与注意点 开发环境 Visual Studio.net 2015/2017 Oracle 11g/12c 数据 ...
- 如何在ASP.NET Core中应用Entity Framework
注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity ...
- Oracle官方版Entity Framework
千呼萬喚始出來! Oracle官方版Entity Framework問市,邁入開發新時代 自從我得了一種"不用LINQ就不會寫資料庫程式"的病,為了滿足工作上要搭配Oracle(雖 ...
- Entity Framework工具POCO Code First Generator的使用
在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...
- Entity Framework工具POCO Code First Generator的使用(参考链接:https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator)
在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...
- dotnet ef执行报错, VS 2019发布时配置项中的Entity Framework迁移项显示不出来
VS 2019发布时配置项中的Entity Framework迁移项显示不出来 dotnet ef dbcontext list --json “无法执行,因为找不到指定的命令或文件.可能的原因包括: ...
随机推荐
- gitlab+gerrit+jenkins持续集成框架
1.持续集成之gitlab+gerrit+jenkins 1.1. GitLab 1.1.1. 简介 GitLab 是一个使用使用Ruby on Rails搭建的,用于仓库管理系统的开源项目.使用Gi ...
- ORACLE 10g AWR报告设置总结
1:查看.修改AWR报告快照数据的采样间隔.保存策略 SQL> COL DBID FOR 999999999999 SQL> COL SNAP_INTERVAL FOR A26 SQL ...
- mysql-5 数据检索(3)
计算字段 如果想在一个字段中既显示公司的名称,又显示公司的地址,但是这两个信息一般包含在不同的表列中 城市.州和邮政编码存储在不同的列中,但是邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来 ...
- android 解决.XML提示ava.lang.NullPointerException at错误后XML没显示
提示错误: java.lang.NullPointerException Exception details are logged in Window > Show View > Erro ...
- 使用redis进行消息推送
Redis支持这样一种特性,你可以将数据推到某个信息管道中,然后其它客户端可以通过订阅这些管道来获取推送过来的信息.使用Redis的Pub/Sub,接收方在某个channel注册为一个订阅者,然后监听 ...
- Sqlserver2008R2 数据库镜像配置步骤
Sqlserver2008镜像功能可以保障数据库的高可用性.数据库镜像维护着数据库的两个副本,这两个副本必须分别放置在不同的SQL Server数据库实例中.可以用两台服务器也可以用一台服务器的不同实 ...
- input文本框和img验证码对齐问题
左边放input,右边img验证码,然后一直不能对齐,如图: img老是比input高出一个头,然后调的头都大了还是不行,照例百度之, 给input和img都加一个 vertical-align:mi ...
- css实现一个写信的格式
一.目标 目标实现如下效果: 二.完成 1.分析 这个效果看起来很简单,实际上可能并不那么容易实现. 首先是全部东西都居中显示,除了“亲爱的starof”这个称呼的地方.这也是难点,也是本文要重点说的 ...
- Network Experiment Environment Construction
In order to provide an environment for network experiments in the future, I use VirutalBox to create ...
- NOIP2000乘积最大[序列DP]
题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...