ABP框架EF6链接Oracle数据库手动迁移

时间:2021-11-26 10:16:45

环境:VS2017 + ABP官方模板(不含Zero) +Oracle 11Gx64DB  + Oracle 11Gx32Client(PLSQL工具访问)

一、Abp项目的下载以及运行

1、创建abp项目。进入官网 https://aspnetboilerplate.com/下载项目模板。abp项目有两种架构,一种是单页面(angularjs),另一种是mvc的。点击创建按钮。入下图:

ABP框架EF6链接Oracle数据库手动迁移

2、对下载的源码首先进行编译,让其自动下载Nuget项目依赖包,保证源码可以编译通过。

3、在WinRun2.Core项目中增加User.cs类:

ABP框架EF6链接Oracle数据库手动迁移

     对User实体增加几个属性如下:

ABP框架EF6链接Oracle数据库手动迁移

 3、在WinRun2.EntityFramework项目中对WinRun2DbContext类进行修改:

ABP框架EF6链接Oracle数据库手动迁移

增加DbSet<User>: 

ABP框架EF6链接Oracle数据库手动迁移

增加Oracle数据库的Schema(默认是dbo,Oracle数据库必须要修改): 

ABP框架EF6链接Oracle数据库手动迁移

 

二、Oracle DB 对EF code first的支持

1、在WinRun2.EntityFramework项目增加Oracle EF 驱动的引用,在Nuget中进行安装:

ABP框架EF6链接Oracle数据库手动迁移

 2、修改WinRun2.Web项目中Web.Config配置信息(也可以在WinRun2.Web中也安装Oracle.ManagedDataAccess的依赖包,就会自动在Config中生成Oracle配置信息)

ABP框架EF6链接Oracle数据库手动迁移

 ABP框架EF6链接Oracle数据库手动迁移

 

ABP框架EF6链接Oracle数据库手动迁移

三、创建Oracle数据库Schema

 1、首先要保证本地客户端可以链接到Oracle DB服务器,用DBA权限的账号使用Oracle开发工具或SQLPLUS创建新的Schema信息:

ABP框架EF6链接Oracle数据库手动迁移

2、登录cps/oracle@winrun进行测试,查询所有Table:

ABP框架EF6链接Oracle数据库手动迁移

3、配置Web.Config中的Oracle链接字符串:

    TNS配置:

ABP框架EF6链接Oracle数据库手动迁移

    链接字符串配置:

ABP框架EF6链接Oracle数据库手动迁移

 

四、实现数据迁移

1、add-migration:

ABP框架EF6链接Oracle数据库手动迁移

2、update-database,此处报错了:

ABP框架EF6链接Oracle数据库手动迁移

3、错误处理,原因是ODP.NET GAC (Global Assembly Cache)中不存在或版本不一致。

Installing Oracle.ManagedDataAccess.dll to GAC resolved my issue. If you installed Oracle Client or Oracle Database on your machine that might be the cause.

ABP框架EF6链接Oracle数据库手动迁移

注意路径,不同的系统版本(Win10)路径会不一样:"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe" /i Oracle.ManagedDataAccess.dll

4、再次update-database,还是报错了,不过换了一个错误:

ABP框架EF6链接Oracle数据库手动迁移

4、此错误说明Oracle驱动已OK,链接登录时报错,再次解决该问题:

在链接字符串中增加Persist Security Info=true 即可。

ABP框架EF6链接Oracle数据库手动迁移

5、再次迁移,成功了!

ABP框架EF6链接Oracle数据库手动迁移

6、Oracle数据库的改变

 ABP框架EF6链接Oracle数据库手动迁移

迁移支持自增长类型(Oracle使用的Trigger+Sequences实现自增长ID)

ABP框架EF6链接Oracle数据库手动迁移

 

参考链接:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/CodeFirst/index.html#overview

http://www.cnblogs.com/freeliver54/p/6951700.html

http://www.cnblogs.com/yuanbeier/articles/6420621.html

http://blog.csdn.net/yangxuilyx/article/details/52561874

https://*.com/questions/32006884/entity-framework-seed-method-exception

http://www.cnblogs.com/haight/p/5600756.html