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 }
View Code

      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 }
View Code

     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     }
View Code

    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         }
View Code

   4.测试。在程序包管理器控制台里面输入 update-database 。没报错说明连接成功。如下图:

   说明:Oracle的EF code first 迁移功能目前不能自己创建数据库。

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

posted @ 2017-02-27 18:07  bei_er  阅读(2131)  评论(4编辑  收藏  举报