Abp项目的创建以及Oracle的支持
一、Abp项目的下载以及运行。
1.创建abp项目。进入官网 http://www.aspnetboilerplate.com 下载项目模板。abp项目有两种架构,一种是单页面(angularjs),另一种是mvc的。点击创建按钮。入下图:
2.还原nuget项目包。打开目录,生成解决方案会自动下载nuget所需的依赖包。
3.数据库的还原(abp模板项目用的是Ef的code first 模式)。解决方案里面的 YBE.Web 设置为启动项目。 打开程序包管理器控制台,默认项目选中YBE.EntityFramework。输入update-database 。入下图:
成功之后打开sqlserver数据库,发现YBE数据库已经成功创建。
4.Code first 模式的运用。Abp模板项目默认启用数据迁移功能。
4.1实体类的添加。 在YBE.Core项目中添加一个User类。代码如下图:

1 namespace YBE 2 { 3 public class User 4 { 5 /// <summary> 6 /// 用户Id 7 /// </summary> 8 public int UserId { set; get; } 9 10 /// <summary> 11 /// 用户名 12 /// </summary> 13 [MaxLength(100)] 14 public string UserName { set; get; } 15 } 16 }
4.2操作接口的添加。在YBE.EntityFramework项目中的 YBEDbContext 类里面添加 public virtual IDbSet<User> Users { get; set; } 。

1 namespace YBE.EntityFramework 2 { 3 public class YBEDbContext : AbpDbContext 4 { 5 //TODO: Define an IDbSet for each Entity... 6 7 8 public virtual IDbSet<User> Users { get; set; } 9 10 /* NOTE: 11 * Setting "Default" to base class helps us when working migration commands on Package Manager Console. 12 * But it may cause problems when working Migrate.exe of EF. If you will apply migrations on command line, do not 13 * pass connection string name to base classes. ABP works either way. 14 */ 15 public YBEDbContext() 16 : base("Default") 17 { 18 19 } 20 21 /* NOTE: 22 * This constructor is used by ABP to pass connection string defined in YBEDataModule.PreInitialize. 23 * Notice that, actually you will not directly create an instance of YBEDbContext since ABP automatically handles it. 24 */ 25 public YBEDbContext(string nameOrConnectionString) 26 : base(nameOrConnectionString) 27 { 28 29 } 30 } 31 }
4.3 映射类的添加(可省略,因为EF可以根据实体类的特性进行映射)。在YBE.EntityFramework项目中的 YBEDbContext 类里面重载 OnModelCreating 方法,并添加对应的映射类。
4.4 更新迁移记录。在程序包管理器控制台里面输入 add-migration createUser .注意程序包管理器控制台的默认项目选中YBE.EntityFramework项目。成功后可以在YBE.EntityFramework项目里面的Migrations文件夹下面找到 201702210821387_createUser.CS 。代码入下:

1 public partial class createUser : DbMigration 2 { 3 public override void Up() 4 { 5 CreateTable( 6 "dbo.Users", 7 c => new 8 { 9 UserId = c.Int(nullable: false, identity: true), 10 UserName = c.String(maxLength: 100), 11 }) 12 .PrimaryKey(t => t.UserId); 13 14 } 15 16 public override void Down() 17 { 18 DropTable("dbo.Users"); 19 } 20 }
4.5 更新数据库。在程序包管理器控制台里面输入 update-database -verbose ,执行成功之后可以在控制台里面看到更新数据库的脚本。更新成功之后数据库已经创建了Users表。
在实践的过程中发现,如果多人开发项目不建议用数据迁移功能。因为多人开发的时候会导致迁移文件错乱,最后导致迁移功能坏掉。
二、Oracle数据库EF code first的支持。
1.添加Oracle.ManagedDataAccess以及Oracle.ManagedDataAccess.EntityFramework的nuget包。如下图:
2.修改web.config配置文件。
2.1 添加 <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.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />以及<entityFramework><providers><provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /></providers></entityFramework>节点。如下图:
2.2 添加<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.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /></DbProviderFactories></system.data>节点。如下图:
2.3 添加<oracle.manageddataaccess.client><version number="*"><dataSources><dataSource alias="QZDB_local1" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=QZDB))) " /></dataSources></version></oracle.manageddataaccess.client>节点。此节点的作用是配置oracle数据库别名的。也可以不配置,如果没有配置该节点,连接字符串会找本机 tnsnames.ora 文件里的实例。如下图:
2.3 修改链接字符串。在<connectionStrings>节点中添加 <add name="Default" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=ttt;Password=123;Data Source=QZDB_local1;Persist Security Info=True;" />
3.添加映射架构关系代码。在YBEDbContext类里面如下代码:

1 protected override void OnModelCreating(DbModelBuilder modelBuilder) 2 { 3 4 modelBuilder.HasDefaultSchema("TYUM_FS"); 5 base.OnModelCreating(modelBuilder); 6 }
4.测试。在程序包管理器控制台里面输入 update-database 。没报错说明连接成功。如下图:
说明:Oracle的EF code first 迁移功能目前不能自己创建数据库。
参考链接:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/CodeFirst/index.html#overview
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix