• 使用CodeFirst实现动态建库


    一、业务分析

        以我们平时注册今目标为例,我们在注册今目标的过程中,具体步骤是这样的:

        

                                          图1 今目标登陆流程

          详细解释一下:

          第一步:注册界面。输入手机号或者邮箱,点击确定进入基本信息界面。

          第二步:基本信息。完善用户的基本信息,点击注册完成注册。其中我们要说的建库建表就是这这一步实现的

          第三步:完成信息。用户完成注册后,弹出提示框,告知用户自己被分配的企业号,账号和密码。

          二、代码设计

          

          首先,我们使用.NET MVC + EF架构,先创建三个界面。 

                                  

                                             图2 创建三个界面

          其次,根据数据库生成CodeFirst代码。如果我们要自己写CodeFirst代码,会十分麻烦,而且类之间的联系不容易把握。贴心的微软为我们从数据库生成CodeFirst代码提供了一个很好的插件:Entity Framework Power Tools Bata 4,打开VS ==> 工具 ==> 扩展和更新,联机搜索一下就可以了。

                           

                              图3 Entity Framework Power Tools Bata 4插件安装

          安装好之后,新建一个类库或者在原类库上右击,会有多了一个EntityFramework选项(没有的重启下VS),然后选择Reverse Engineer Code First选项,会弹出我们熟悉的连接数据库的弹出框,点击确定会自动根据数据库创建出CodeFirst代码,非常方便。

                                                                                                                   

                                                                                           图4-1 生成CodeFirst代码

                            

                                             图4-2 连接数据库属性

                                     

                                       图4-3  从数据库生成CodeFirst代码

          最后,就是在代码中实现数据库的自动创建了,就是我们在点击注册按钮动态生成一整套数据库的操作,这里只给大家展示了动态建库的关键代码。

          这一步要做两件事情:

          1.修改EF上下文的构造函数为数据库连接字符床,因为默认是从配置文件读取的。

          

    [csharp] view plain copy
     
    1. namespace DbFristModel.Models  
    2. {  
    3.     public partial class ModelTestContext : DbContext  
    4.     {  
    5.         static ModelTestContext()  
    6.         {  
    7.             Database.SetInitializer<ModelTestContext>(null);  
    8.         }  
    9.   
    10.         //修改上下文默认构造函数  
    11.         public ModelTestContext(string connectionString)  
    12.             : base(connectionString)  
    13.         {              
    14.             //判断上下文中是否存在连接字符串中的数据库,存在则连接,不存在则自动创建  
    15.             this.Database.CreateIfNotExists();  
    16.         }  
    17.   
    18.         public DbSet<Class> Classes { get; set; }  
    19.         public DbSet<Student> Students { get; set; }  
    20.   
    21.         protected override void OnModelCreating(DbModelBuilder modelBuilder)  
    22.         {  
    23.             modelBuilder.Configurations.Add(new ClassMap());  
    24.             modelBuilder.Configurations.Add(new StudentMap());  
    25.         }  
    26.     }  
    27. }  

          2.在点击注册按钮的时候动态建库,Controller中的代码:

          

    [csharp] view plain copy
     
    1. //连接字符串  
    2. string connectionString = "Data Source=.; User=sa;Password=123456;Initial Catalog=" + db.DbName + ";Integrated Security=True";              
    3.   
    4. ModelTestContext newDB = new ModelTestContext(connectionString);  

          至此,我们动态建库的关键代码都已经实现了,要给大家说明的一点是,数据库的名字是权限系统的数据库ID+学校代码自动生成的,所以每次注册我们都能够生成不同的数据库。

          效果展示:

                                

                                           图5 动态创建的数据库  

          以上就是小编对使用CodeFirst实现动态建库基本了解,如果您也遇到类似需求,欢迎多多交流。

  • 相关阅读:
    @3 UOJ428 & UOJ461 & UOJ671
    DZY Loves Chinese II
    [冲刺国赛2022] 模拟赛12
    [冲刺国赛2022] 模拟赛11
    【记录】将labelme json文件转为mask掩模图
    两阶段深度学习中的两阶段是指什么意思?
    Docker(一)安装、介绍、镜像、容器与仓库
    C++ Primer Plus 学习 (一)C++介绍与数据处理
    C++ 疑问合集
    遇到ImportError: cannot import name ‘soft_unicode’ from 'markupsafe’问题
  • 原文地址:https://www.cnblogs.com/sylone/p/6081122.html
Copyright © 2020-2023  润新知