zoukankan      html  css  js  c++  java
  • 使用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实现动态建库基本了解,如果您也遇到类似需求,欢迎多多交流。

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/sylone/p/6081122.html
Copyright © 2011-2022 走看看