使用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 ...
随机推荐
- djiango控制语句
{# 从0开始的索引#} {% for foo in value %} {# 从0开始的索引#} <p>{{ forloop.counter0 }}: {{ foo }}</p> ...
- sqli-labs:11-16,post注入
sqli11: post:uname=xx' order by 2#&passwd=bla&submit=Submit(判定字段为2) 解释下为什么结果不是admin,这是sql执行的 ...
- .net获取本地ip地址
整理代码,.net获取本地ip地址,代码如下: string name = Dns.GetHostName(); IPHostEntry IpEntry = Dns.GetHostEntry(name ...
- JavaScript 内存泄漏教程
一.什么是内存泄漏? 程序的运行需要内存.只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存. 对于持续运行的服务进程(daemon),必须及时释放不再用到的内存.否则,内存占用越来 ...
- ubuntu下安装maven(转载)
下载maven http://maven.apache.org/download.cgi 解压 tar -xzvf apache-maven-3.0.5-bin.tar.gz 配置环境变量 sudo ...
- 【linux轻松学】修改文件权限
用chmod修改文件权限,此命令非常重要. 用户范围:u 表示当前用户g 表示当前群组o 除u,g之外的用户和群组a 所有用户和群组 权限代号:r :读,用数字4表示w :写,用数字2表示x :执行, ...
- Python之字符串基本操作
#!/usr/bin/env python#-*-coding utf8-*-#Author:caojininfo = { 'stu1001': 'caojin', 'stu1002': 'zhaom ...
- Django的学习(一)————初入django
一.基本指令 1.项目的建立: Django的项目建立,进入目录,打开cmd输入 django-admin startproject[项目名称],注意如果是在其他文件下把项目设计成资源文件. 2.Ap ...
- 导入CA证书报错 keytool error: java.lang.Exception: Input not an X.509 certificate
导入CA证书报错: keytool error: java.lang.Exception: Input not an X.509 certificate 如果你的CA证书是如下格式的: -----BE ...
- 2019.01.22 zoj3583 Simple Path(并查集+枚举)
传送门 题意简述:给出一张图问不在从sss到ttt所有简单路径上的点数. 思路: 枚举删去每个点然后把整张图用并查集处理一下,同时不跟sss和ttt在同一个连通块的点就是满足要求的点(被删去的不算). ...