使用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上下文的构造函数为数据库连接字符床,因为默认是从配置文件读取的。
- namespace DbFristModel.Models
- {
- public partial class ModelTestContext : DbContext
- {
- static ModelTestContext()
- {
- Database.SetInitializer<ModelTestContext>(null);
- }
- //修改上下文默认构造函数
- public ModelTestContext(string connectionString)
- : base(connectionString)
- {
- //判断上下文中是否存在连接字符串中的数据库,存在则连接,不存在则自动创建
- this.Database.CreateIfNotExists();
- }
- public DbSet<Class> Classes { get; set; }
- public DbSet<Student> 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 动态创建的数据库
以上就是小编对使用CodeFirst实现动态建库基本了解,如果您也遇到类似需求,欢迎多多交流。
使用CodeFirst实现动态建库的更多相关文章
- 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库
导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...
- 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式
导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...
- [ITOO]动态建库 标签: 库数据库mysql 2016-07-17 21:23 241人阅读 评论(2) 收
最近一直在做权限系统的动态建库,动态建库,说白了就是在你点击"注册"按钮的时候,根据你输入的信息,来创建一个企业所需要的数据库的过程,因为现阶段并没有提供购买等功能,所以暂时咱们是 ...
- 基于EntityFramework 6 Code First实现动态建库,分库,数据库自动迁移
一.前言 公司原本有一个"xx系统",ORM使用EntityFramework,Code First模式.该系统是针对某个客户企业的,现要求该系统支持多个企业使用,但是又不能给每个 ...
- Vertica 安装,建库,新建测试用户并授予权限,建表,入库
测试环境:RHEL 6.4 + Vertica 6.1.3-7 需求:搭建Vertica数据库3节点的测试环境,建立测试用户,建表,测试数据入库. 1.各节点关闭防火墙和SELinux,配置主机名,I ...
- CENTOS 6.4 安装oracle 10g,手工建库及升级到10.2.0.5
一. 数据库软件安装 参照官方手册 1.安装rpm包 注这里的yum直接用163的yum yum -y install binutils compat-libstdc++-33 compat-libs ...
- Oracle 11g R2创建数据库之手工建库方式
在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库.这种建库方式就是完全使用手工SQL语句创建数据库,通常 ...
- Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)
Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven) 本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了. 本篇内容: (1)M ...
- solr6.3.0升级与IK动态词库自动加载
摘要:对于中文的搜索来说,词库系统是一个很比较重要的模块,本篇以IK分词器为例子,介绍如何让分词器从缓存或文件系统中自动按照一定频次进行加载扩展词库 Lucene.Solr或ElasticStack如 ...
随机推荐
- MongoDB本地安装与启用(windows )
MongoDB的安装与MongoDB服务配置 Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了 ...
- linux 文件和目录操作
1 相对路径和绝对路径 (与C++中概念相似) cd /root/cat 绝对路径 cd ../文件名/ 相对路径,指相对某个文件而言的 2 切换目录 cd 当前目录 进入某个目录 pwd 显示当前 ...
- 2、创建File类对象
既然是内置类,那么我们创建对象时自然要看它封装好的构造函数咯,由下图的4中构造函数我们可知有4种办法来创建File对象 具体代码如下 public class Demo { public static ...
- 浙大pat 1062题解
1061. Dating (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Sherlock Holmes ...
- C++ 内存分析-valgrind
valgrind包括了以下几个比较重要的模块:memcheck, cachegrind, callgrind, helgrind, drd, massif, dhat, sgcheck, bbv. 还 ...
- Django中url匹配规则的补充
Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...
- HDU 1253 胜利大逃亡(BFS)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A ...
- poj 1687 Buggy Sat 简单计算几何
暑期集训出的第一道一血 感觉自己萌萌哒…… 这道题本身并没有坑点 仅仅是翻译巨坑…… 解大腿在做B 安学长在做E 我闲着也没事 就一个词一个词翻译F…… 最后感觉…… 题干大多数都看不懂…… 也都没啥 ...
- 2014web面试题
面试题目会根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑; 类型: 技术视野.项目细节.理论知识型题,算法题,开放性题,案例题. 进行追问,可以确保问到你开始不懂或者面试官开始不懂为止 ...
- 第二次冲刺spring会议(第四次会议)
[例会时间]2014/5/7 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇