设为首页 加入收藏

TOP

使用CodeFirst实现动态建库
2015-07-24 09:27:41 来源: 作者: 【 】 浏览:0
Tags:使用 CodeFirst 实现 动态

在项目ITOO3.0中,有一个技术点是动态建库建表。简单的解释一下,就用一个用来来注册我们高校云平台系统的时候,我们会动态的为他创建一整套ITOO的后台数据库。好了,项目背景理清楚了,下面是具体的实现过程。

一、业务分析

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

\

图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上下文的构造函数为数据库连接字符床,因为默认是从配置文件读取的。

?

namespace DbFristModel.Models
{
    public partial class ModelTestContext : DbContext
    {
        static ModelTestContext()
        {
            Database.SetInitializer
  
   (null);
        }

        //修改上下文默认构造函数
        public ModelTestContext(string connectionString)
            : base(connectionString)
        {            
            //判断上下文中是否存在连接字符串中的数据库,存在则连接,不存在则自动创建
            this.Database.CreateIfNotExists();
        }

        public DbSet
   
     Classes { get; set; } public DbSet
    
      Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new ClassMap()); modelBuilder.Configurations.Add(new StudentMap()); } } }
    
   
  

?

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

?

            //连接字符串
            string connectionString = "Data Source=.; User=sa;Password=123456;Initial Catalog=" + db.DbName + ";Integrated Security=True";            
            
            ModelTestContext newDB = new ModelTestContext(connectionString);

?

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

效果展示:

\

图5 动态创建的数据库

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongoDB常见错误解决方式 下一篇ERROR 1045 (28000): Access deni..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)