一、业务分析

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

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

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

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

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

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

效果展示:

图5 动态创建的数据库

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

使用CodeFirst实现动态建库的更多相关文章

  1. 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库

    导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...

  2. 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式

    导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...

  3. [ITOO]动态建库 标签: 库数据库mysql 2016-07-17 21:23 241人阅读 评论(2) 收

    最近一直在做权限系统的动态建库,动态建库,说白了就是在你点击"注册"按钮的时候,根据你输入的信息,来创建一个企业所需要的数据库的过程,因为现阶段并没有提供购买等功能,所以暂时咱们是 ...

  4. 基于EntityFramework 6 Code First实现动态建库,分库,数据库自动迁移

    一.前言 公司原本有一个"xx系统",ORM使用EntityFramework,Code First模式.该系统是针对某个客户企业的,现要求该系统支持多个企业使用,但是又不能给每个 ...

  5. Vertica 安装,建库,新建测试用户并授予权限,建表,入库

    测试环境:RHEL 6.4 + Vertica 6.1.3-7 需求:搭建Vertica数据库3节点的测试环境,建立测试用户,建表,测试数据入库. 1.各节点关闭防火墙和SELinux,配置主机名,I ...

  6. CENTOS 6.4 安装oracle 10g,手工建库及升级到10.2.0.5

    一. 数据库软件安装 参照官方手册 1.安装rpm包 注这里的yum直接用163的yum yum -y install binutils compat-libstdc++-33 compat-libs ...

  7. Oracle 11g R2创建数据库之手工建库方式

    在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库.这种建库方式就是完全使用手工SQL语句创建数据库,通常 ...

  8. Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)

    Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven) 本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了. 本篇内容: (1)M ...

  9. solr6.3.0升级与IK动态词库自动加载

    摘要:对于中文的搜索来说,词库系统是一个很比较重要的模块,本篇以IK分词器为例子,介绍如何让分词器从缓存或文件系统中自动按照一定频次进行加载扩展词库 Lucene.Solr或ElasticStack如 ...

随机推荐

  1. webservice底层使用Socket进行网络调用

    服务端代码(其实tomcat的原理也是这样): 客户端代码:

  2. Design Pattern——单一职责原理

    在类的职责分离上多考虑,做到单一职责,这样的代码才能做到易于维护,易扩展,灵活多样.

  3. 单词缩写(abbr.cpp)每日一题

    题目描述:YXY 发现好多计算机中的单词都是缩写,如 GDB,它是全称 Gnu DeBug 的缩写.但是,有时缩写对应的全称并不固定,如缩写 LINUX,可以理解为:(1)LINus's UniX ( ...

  4. MySQL5.5.28启动错误 The server quit without updating PID file

    今天重新安装了一次 MySQL5.5.28 ,但启动的时候老是报错 Starting MySQL.. ERROR! The server quit without updating PID file ...

  5. 02--Java TCP Socket编程

    一.基础知识 1. TCP状态转换知识,可参考: http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 2. TCP/IP五层模型   ...

  6. js--javascript中字符串常用操作总结、JS字符串操作大全

    字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温 ...

  7. [妙味JS基础]第五课:函数传参、重用、价格计算

    知识点总结 函数传参,传的参数=数据类型(即:数值.字符串.布尔.函数.对象.未定义) 通过传参来重用代码 1.尽量保证 HTML 代码结构一致,可以通过父级选取子元素 2.把核心主程序实现,用函数包 ...

  8. iOS开发极光推送显示 开发证书没有通过验证 是否重新上传证书?解决方法

    1.证书密码错误 2证书环境不匹 3导证书时因手误把私钥导出来了,而不是证书 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书: ...

  9. php 语音参考

    如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记.这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图.   ...

  10. Node使用Mongoose操作MongoDB数据库——增删改查的实现

    当初刚出社会时就规划了下自己的职业生涯:先成为一名优秀的前端工程师,再成为一名全栈工程师(精通前端开发.后台开发和客户端开发),最后成为一名优秀的系统架构师.转眼间已经工作快三年,是时候迈出关键性的一 ...