使用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 ...
随机推荐
- Spring IOC(二)beanName 别名管理
Spring IOC(二)beanName 别名管理 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 一.AliasReg ...
- pytho常用模块2——random
random模块用来生成随机数,有以下几个常用方法: import random random.random() #产生随机数[0-1) random.randint(a,b) #产生随机整数[a,b ...
- javascript对象bind()方法兼容处理
bind() 函数在 ECMA-262 第五版才被加入:它可能无法在所有浏览器上运行.你可以部份地在脚本开头加入以下代码,就能使它运作,让不支持的浏览器也能使用 bind() 功能 if (!Func ...
- Ajax在jQuery中的应用 (4)向jsp提交表单数据
ajax技术带给我们的是良好的用户体验,同时,使用jquery可以简化开发,提高工作效率. 下面就介绍一下大致的开发步骤. 工具/原料 本文中使用的是 jquery-1.3.2.min.js 方法/步 ...
- 使用jackson美化输出json/xml
转载:http://www.cnblogs.com/xiwang/ 如何使用jackson美化输出json/xml 1.美化POJO序列化xml 下面将POJO列化为xml并打印. Person pe ...
- decode 横竖转换
select rq 日期,sum(decode(shengfu,'胜',1,'负',0)) 胜,sum(decode(shengfu,'负',1,'胜',0)) 负 from tmp group by ...
- 【转】MongoDB导入导出以及数据库备份
-------------------MongoDB数据导入与导出------------------- 1.导出工具:mongoexport 1.概念: mongoDB中的m ...
- 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)
传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...
- 2018.10.26 poj3421X-factor Chains(数论+排列组合)
传送门 排列组合入门题. 令X=p1a1p2a2..pkakX=p_1^{a_1}p_2^{a_2}..p_k^{a_k}X=p1a1p2a2..pkak 那么答案1就等于∑i=1kai\ ...
- asp.net core跨平台开发从入门到实战文摘
第1章 .NET Core 第2章 dotnet命令 第3章 VS Code安装及介绍 第4章 VS2015开发.NET Core 第5章 ASP.NET Core 第6章 EF Core 第7章 A ...