基于Abp 的.net core 工程改造mysql 的记录

Posted muzizongheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Abp 的.net core 工程改造mysql 的记录相关的知识,希望对你有一定的参考价值。

1. 首先从 https://aspnetboilerplate.com/ 创建个demo, 注意:abp现在有2个网站创建模板, 另一个是 http://abp.io/。 区别是abp.io是基于.net core 3.0以上的。因为项目需求, 此处用的还是第一个网站创建。

2. 改造EntityFrameworkCore工程的引用,目前是用的.net core 2.2。具体最终的引用如下

3. 该种EntityFrameworkCore工程里DbContextOptionsConfigurer 类。 如果没有指定mysql的版本, 最终在update-database时可能会出现datetime(6) 语法错误

 

   public static class DbContextOptionsConfigurer

    

        public static void Configure(

            DbContextOptionsBuilder<CollaborationPlatformDbContext> dbContextOptions,

            string connectionString

            )

        

            /* This is the single point to configure DbContextOptions for CollaborationPlatformDbContext */

            dbContextOptions.UseMySql(connectionString,

                mysqlOptions =>

                

                    //此处指定mysql版本是因为code first生成的msyql 语法和版本相关, 比如DateTime

                    mysqlOptions.ServerVersion(new Version(5, 5), ServerType.MySql);

                );

        





        public static void Configure(

            DbContextOptionsBuilder<CollaborationPlatformDbContext> builder,

            DbConnection connection)

        

            builder.UseMySql(connection,

                mysqlOptions =>

                

                    //此处指定mysql版本是因为code first生成的msyql 语法和版本相关, 比如DateTime

                    mysqlOptions.ServerVersion(new Version(5, 5), ServerType.MySql);

                );

        

    

4. 在.Core工程中定义实体

public class Abc: Entity<int>

    

        private string _name = string.Empty;

        public string Name

        

            get

            

                return _name;

            

            set

            

                _name = value;

            

        

    

 

5. 在EntityFrameworkCore工程里定义对应的CodeFirst映射逻辑类

public class AbcConfiguration : IEntityTypeConfiguration<Abc>

    

        public void Configure(EntityTypeBuilder<Abc> builder)

        

            builder.ToTable("Abc");

        

    

6. 在EntityFrameworkCore工程里的xxxDbContext.cs内, 定义表

//Add DbSet properties for your entities...

        public virtual DbSet<Abc> Abcs

        

            get; set;

        

 

7. 继续在xxxDbContext类的OnModelCreating方法中添加刚才的code first 逻辑


protected override void OnModelCreating(ModelBuilder modelBuilder)

        

            base.OnModelCreating(modelBuilder);





             builder.ApplyConfiguration(new AbcConfiguration());

        

 

到此, 整个mysql改造及初步的表定义及持久化demo就ok了, 现在需要创建对应的mysql

 

  1. 在某个启动工程里添加mysql的connectionstring, 比如web工程或者console工程里的app.config 或者appsettings.json

  2. 在包含connectionstring的工程上右键选择 “设为启动项目”

  3. 在vs顶部菜单上,选择“工具”/“Nuget 包管理器” / “程序包管理器控制台”, 也就是常说的PMC

  4. 在打开的PMC中的顶部“默认项目”中选择EntityFrameworkCore工程, 这个步骤非常重要。  不然会报错“Your target project '' doesn't match your migrations assembly ''. Either change your target project or change your migrations assembly.”

  5. 在PMC中敲入Add-Migration "Init_Create"命令

最终会在选择的工程中创建Migrations文件夹, 并生成数据库创建的类, 我们需要打开看看里面的表名、列名、列定义、表之间的关系是否符合我们的预期。

 

    6. 接下来我们就可以在PMC中敲入Update-Database命令, 用来调用migration的类来创建数据库及表

 

 

以上是关于基于Abp 的.net core 工程改造mysql 的记录的主要内容,如果未能解决你的问题,请参考以下文章

[译]基于ASP.NET Core 3.0的ABP v0.21已发布

[Abp 源码分析]ASP.NET Core 集成

abp(net core)+easyui+efcore

abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)

abp(net core)+easyui+efcore实现仓储管理系统——模块管理升级之上(六十一)

如何为 .NET Core 重命名 ABP 中的列?