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数据库小计的更多相关文章

  1. (转) C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库

    原贴链接:https://www.cnblogs.com/mq0036/p/11052359.html C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracl ...

  2. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  3. Java操作Oracle数据库以及调用存储过程

    操作Oracle数据库 publicclass DBConnection {     //jdbc:oracle:thin:@localhost:1521:orcl     publicstaticf ...

  4. PHP操作Oracle数据库

    原文出处 (这是来自“百度文库”中的文章写得很不错) PHP操作Oracle数据库(OCI数据抽象层)OCI(Oracle 8 Call-Interface)是PHP中内置的数据库抽象层函数.下面针对 ...

  5. Python使用cx_Oracle模块连接操作Oracle数据库

    1. 简单介绍 cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包含 Oracle 9.2 10.2 以及 11.1 等版本号 2.安装 最好是去官网h ...

  6. Java java jdbc thin远程连接并操作Oracle数据库

    JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...

  7. loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试

    调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...

  8. 使用ADO.NET操作Oracle数据库

    本文将示例使用C#的ADO.NET技术调用Oralce的存储过程和函数及操作Oracle数据库. 在oracle的hr数据库中建立存储过程 在oralce的hr数据库中建立函数 新建控制台项目,在主函 ...

  9. 连接Linux服务器操作Oracle数据库

    连接Linux服务器操作Oracle数据库   由于项目已经上线,现场的数据库服务器不允许直接用Oracle的客户端plsqldev.exe来连接,只能通过Linux服务器的命令来操作. 以下是用Se ...

随机推荐

  1. 20岁的设计师vs30岁的设计师

    20岁的设计师vs30岁的设计师 如果你还是20来岁,要恭喜你,你还年轻, 一切才刚刚开始 还有时间去探索无尽的可能 还有时间去找到无限的前途 ​ 如果30岁的你还不够强大, 请记得时刻给予自己信心, ...

  2. Eclipse快捷键系列

    查看Eclipse自定义的快捷键或者自己定义快捷键的方式 Window --> preference --> general --> Keys 在光标所在行之后插入一行,省去了将光标 ...

  3. 无法创建.gitignore文件,提示必须输入文件名称

    If you're using Windows it will not let you create a file without a filename in Windows Explorer. It ...

  4. Netty 源码 NioEventLoop(三)执行流程

    Netty 源码 NioEventLoop(三)执行流程 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 上文提到在启动 N ...

  5. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序

    1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化? 资源竞争导致死锁,比如A B 同时操作两条记录,并等待对方释放锁. 优化sql, 加缓存,主从(如读写分 ...

  6. json数据映射填充到html元素显示

    映射算法做了改进,支持name重复映射 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  7. 再读c++primer plus 006

    使用类: 1.重载限制:(1)重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符 (2)使用运算符时不能违反运算符原来的语法规则,不能修改运算符的优先级 (3)不能创 ...

  8. oracle in 多个字段

    oracle 使用in的时候使用多个字段 这个也是刚需啊. 最近有个需求,在一堆商品里面过滤出一些特定的商品类型.供应商的商品(同时满足). 需要的数量不多,但是可能会变化,所以做了两个配置表. 商品 ...

  9. Codeforces 1106 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 读错题还能过样例我给自己点个赞. 题意简述:给一个010101网格SSS,问满足Si,j=Si+1,j+1=Si+1,j−1=Si− ...

  10. 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)

    传送门 先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护. 注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset. 代码: #include&l ...