• 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这个文件


    换成下面这段代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Xml.Linq;
     6 using System.Data.Common;
     7 using System.Data.Entity;
     8 using System.Data.Entity.Core.Objects;
     9 using System.Data.Entity.Migrations;
    10 using System.Data.Entity.Infrastructure;
    11 using System.Data.Entity.Migrations.History;
    12 using System.ComponentModel.DataAnnotations;
    13 using System.ComponentModel.DataAnnotations.Schema;
    14 
    15 namespace EFCodeFirst
    16 {
    17     class Program
    18     {
    19         static void Main(string[] args)
    20         {
    21             Database.SetInitializer(new DropCreateDatabaseAlways<OracleDbContext>());
    22 
    23             using (var ctx = new OracleDbContext())
    24             {
    25                 var emp = new Employee
    26                 {
    27                     Name = "Tom",
    28                     HireDate = DateTime.Now
    29                 };
    30 
    31                 ctx.Employees.Add(emp);
    32                 ctx.SaveChanges();
    33 
    34                 var dept = new Department
    35                 {
    36                     Name = "Accounting",
    37                     ManagerId = emp.EmployeeId
    38                 };
    39 
    40                 ctx.Departments.Add(dept);
    41                 ctx.SaveChanges();
    42             }
    43 
    44             Console.Write("Press any key to continue... ");
    45             Console.ReadLine();
    46         }
    47     }
    48 
    49 
    50     public class Employee
    51     {
    52         public int EmployeeId { get; set; }
    53         public string Name { get; set; }
    54         public DateTime HireDate { get; set; }
    55         //public string Location { get; set; }
    56     }
    57 
    58     public class Department
    59     {
    60         public int DepartmentId { get; set; }
    61         public string Name { get; set; }
    62         [ForeignKey("Manager")]
    63         public int ManagerId { get; set; }
    64         public Employee Manager { get; set; }
    65     }
    66 
    67     public class OracleDbContext : DbContext
    68     {
    69         public DbSet<Employee> Employees { get; set; }
    70         public DbSet<Department> Departments { get; set; }
    71 
    72         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    73         {
    74             modelBuilder.HasDefaultSchema("HR");
    75         }
    76     }
    77 }
    View Code

    下面是主要的调用代码,演示了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

  • 相关阅读:
    2019-09-29-阿里三面
    【Layui】在前端提交表单时验证密码是否正确
    【Mivik 的字符串公开赛A】大佬语录(广义后缀自动机)
    【2020ICPC南京J】Just Another Game of Stones(Nim博弈+吉老师线段树)
    【HDU-6291/2018CCPC女生赛E】对称数(散列+树上主席树)
    【计蒜客42547/2019ICPC徐州H】Yuuki and a problem(MEX性质+树套树)
    【HDU-6230/2017CCPC哈尔滨A】Palindrome(式子转换+马拉车+主席树)
    【HDU-6223/2017ICPC沈阳G】Infinite Fraction Path(后缀数组+超级快读)
    【HDU-5785】Interesting(回文串的性质+回文自动机+map空间优化)
    【CF-1452E】Two Editorials (贪心)
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/how-to-use-code-first-in-oracle-with-entity-framework-6.html
Copyright © 2020-2023  润新知