使用EF操作Oracle数据库小计
1、建表
CREATE TABLE item.ORDERS(
ORDERID NUMBER(20) CONSTRAINT PK_ORDERS PRIMARY KEY,
ORDERNO VARCHAR2(20),
STOREID NUMBER(20),
STOREOWNERID NUMBER(20),
CUSTOMERID NUMBER(20),
ORDERTYPE NUMBER(3),
ORDERSTATUS NUMBER(3)
);
2、ID自增列设置
create sequence ITEM_ORDERS_SEQ
minvalue 1 -- 最小值=1
maxvalue 999999999999999999999999999 -- 指定最大值
-- 或nomaxvalue -- 没有最大值
-- NOCYCLE; -- 不循环
start with 1 -- 从1开始
increment by 1 -- 每次递增1
cache 20; create or replace trigger ITEM_ORDERS_TRI
before insert ON item.orders --表名
for each row
declare
nextid number;
begin
IF :new.ORDERID IS NULL or :new.ORDERID=0 THEN --ORDERID为列名
select ITEM_ORDERS_SEQ.nextval
into nextid
from sys.dual;
:new.ORDERID:=nextid;
end if;
end ITEM_ORDERS_TRI;
3、nuget引用包(先删除已有的包,再按1、2、3次序依次引入)

4、连接串配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<entityFramework>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory,Oracle.ManagedDataAccess.EntityFramework,Version=6.122.1.0,Culture=neutral,PublicKeyToken=89b483f429c47342" />
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</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.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=item;Password=yungou;Data Source=order_db" />
</connectionStrings>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="order_db" descriptor="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.96)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))" />
</dataSources>
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="3" />
<add name="int16" precision="5" />
<add name="int32" precision="10" />
<add name="int64" precision="19" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
5、映射管理
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions; namespace EF.Oracle
{
/// <summary>
/// OracleDbContext
/// </summary>
public class OracleDbContext : DbContext
{
/// <summary>
/// OracleDbContext
/// </summary>
public OracleDbContext()
: base("OracleDbContext")
{ } public DbSet<Order> Orders { get; set; } /// <summary>
/// OnModelCreating
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("ITEM");
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<DatabaseGeneratedAttributeConvention>(); modelBuilder.Entity<Order>().ToTable("ORDERS");
//自增列需要在数据库建序列+触发器配合生成
modelBuilder.Entity<Order>().HasKey(o => o.OrderId);
modelBuilder.Entity<Order>().Property(o => o.OrderId).HasColumnName("ORDERID");
modelBuilder.Entity<Order>().Property(o => o.OrderNo).HasColumnName("ORDERNO");
modelBuilder.Entity<Order>().Property(o => o.StoreId).HasColumnName("STOREID");
modelBuilder.Entity<Order>().Property(o => o.StoreOwnerId).HasColumnName("STOREOWNERID");
modelBuilder.Entity<Order>().Property(o => o.CustomerId).HasColumnName("CUSTOMERID");
modelBuilder.Entity<Order>().Property(o => o.OrderType).HasColumnName("ORDERTYPE");
modelBuilder.Entity<Order>().Property(o => o.OrderStatus).HasColumnName("ORDERSTATUS");
}
}
} /*
* 自增列实现SQL
*
create sequence ITEM_ORDERS_SEQ
minvalue 1 -- 最小值=1
maxvalue 999999999999999999999999999 -- 指定最大值
-- 或nomaxvalue -- 没有最大值
-- NOCYCLE; -- 不循环
start with 1 -- 从1开始
increment by 1 -- 每次递增1
cache 20; create or replace trigger ITEM_ORDERS_TRI
before insert ON item.orders --表名
for each row
declare
nextid number;
begin
IF :new.ORDERID IS NULL or :new.ORDERID=0 THEN --ORDERID为列名
select ITEM_ORDERS_SEQ.nextval
into nextid
from sys.dual;
:new.ORDERID:=nextid;
end if;
end ITEM_ORDERS_TRI;
*/
6、实体模型
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EF.Oracle
{
public class Order
{
public long OrderId { get; set; }
public string OrderNo { get; set; } public long StoreId { get; set; } /// <summary>
/// 店主Id
/// </summary>
public long StoreOwnerId { get; set; } /// <summary>
/// 买家Id
/// </summary>
public long CustomerId { get; set; } /// <summary>
/// 订单类型
/// </summary>
public int OrderType { get; set; } /// <summary>
/// 订单状态
/// </summary>
public int OrderStatus { get; set; }
}
}
7、调用
using System;
using System.Data.Entity;
using System.Data.Entity.Core.Common.CommandTrees;
using System.Data.Entity.Core.Metadata.Edm;
using System.Linq;
using System.Text; namespace EF.Oracle
{
class Program
{
static OracleDbContext dbContext = new OracleDbContext();
static void Main(string[] args)
{
dbContext.Database.Log = Console.WriteLine; //ef生成sql日志跟踪 https://www.cnblogs.com/huangxincheng/p/5911448.html
var q = (from p in dbContext.Orders where p.OrderId >
select p).Any();
Console.WriteLine(q.ToString()); CreateOrder();
QueryOrder();
EditOrder();
QueryOrder();
Console.WriteLine("ok"); Console.Write("Press any key to continue... ");
Console.ReadLine();
} private static void CreateOrder()
{
DeleteOrder(); Order o = new Order
{
OrderNo = "",
CustomerId = ,
OrderStatus = ,
OrderType = ,
StoreId = ,
StoreOwnerId =
}; dbContext.Orders.Add(o);
dbContext.SaveChanges();
} private static void EditOrder()
{
var order = dbContext.Orders.FirstOrDefault(o => o.OrderNo.Equals(""));
if (order != null)
{
order.CustomerId = ;
order.OrderType = ; dbContext.SaveChanges();
}
} private static void DeleteOrder()
{
var order = dbContext.Orders.FirstOrDefault(o => o.OrderNo.Equals(""));
if (order != null)
{
dbContext.Orders.Remove(order);
dbContext.SaveChanges();
}
} private static void QueryOrder()
{
var order = dbContext.Orders.FirstOrDefault(o => o.OrderNo.Equals(""));
if (order != null)
{
Console.WriteLine(string.Format("{0}-{1}-{2}", order.OrderId, order.OrderNo, order.CustomerId));
}
}
}
}
8、输出

使用EF操作Oracle数据库小计的更多相关文章
- (转) C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库
原贴链接:https://www.cnblogs.com/mq0036/p/11052359.html C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracl ...
- ASP.NET操作ORACLE数据库之模糊查询
ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
- PHP操作Oracle数据库
原文出处 (这是来自“百度文库”中的文章写得很不错) PHP操作Oracle数据库(OCI数据抽象层)OCI(Oracle 8 Call-Interface)是PHP中内置的数据库抽象层函数.下面针对 ...
- Python使用cx_Oracle模块连接操作Oracle数据库
1. 简单介绍 cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包含 Oracle 9.2 10.2 以及 11.1 等版本号 2.安装 最好是去官网h ...
- Java java jdbc thin远程连接并操作Oracle数据库
JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...
- loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...
- 使用ADO.NET操作Oracle数据库
本文将示例使用C#的ADO.NET技术调用Oralce的存储过程和函数及操作Oracle数据库. 在oracle的hr数据库中建立存储过程 在oralce的hr数据库中建立函数 新建控制台项目,在主函 ...
- 连接Linux服务器操作Oracle数据库
连接Linux服务器操作Oracle数据库 由于项目已经上线,现场的数据库服务器不允许直接用Oracle的客户端plsqldev.exe来连接,只能通过Linux服务器的命令来操作. 以下是用Se ...
随机推荐
- POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 8729 Accepted: 36 ...
- There are stopped jobs
问题背景 系统:ubuntu,当输入exit退出shell时,出现There are stopped jobs 无法退出shell 解决办法 找到这个stopped job然后终止它 jobs 或者 ...
- 【UI测试】--独特性
- Java SE学习【三】——JDBC
最近学到了数据库与java的jdbc方面,还有个DAO模式,写一下自己的理解,后期有什么不对的再改. 一.数据库三范式的理解 记得以前上课时,也上了一学期的“数据库系统原理”,给我们上课的老师算是渣渣 ...
- Android NDK定位.so文件crash代码位置
参考:http://blog.csdn.net/xyang81/article/details/42319789 问题: QRD8926_110202平台的Browser必现报错.(去年的项 ...
- dubbo学习(zz)
dubbo学习 博客分类: 开源软件 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站 ...
- syslog系统日志、Windows事件日志监控
- Linux运维之shell脚本
一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...
- Hadoop3集群搭建之——配置ntp服务
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 下篇: Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简 ...
- 2019.01.20 bzoj3999: [TJOI2015]旅游(树链剖分)
传送门 树链剖分菜题. 题意不清差评. 题意简述(保证清晰):给一棵带权的树,每次从aaa走到bbb,在走过的路径上任意找两个点,求后访问的点与先访问的点点权差的最大值. 思路: 考虑暴力:维护路径的 ...