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

一、EF的3种工作方式

1.1,Model First

这种EF工作流模式仅仅在实体数据库不存在的情况下使用,使用设计器进行Model 先行开发,开发过程为:

1.在EF设计器里创建model

2.通过model生成实体Database

3.通过model自动生成类classes

1.2,Database First

与Model First刚好相反,是仅在数据库存在的情况下使用,进行数据库的先行开发,过程为:

1.创建数据库

2.在EF设计器里通过已经存在的Database逆向生成工程模型model

3.通过model自动生成类classes

1.3,Code First

这种EF工作流模式既可以在实体数据库本身还不存在下,又可以在实体数据库本身已经存在情况下进行代码的现行开发:

情况一:实体数据库本身还不存在的情况下开发步骤:

1.通过代码编写类以及映射关系,即创建了Model

2.通过Model生成实体数据库

3.可以应用自EF4.3以后版本提供的Migration(数据迁移)来使我们的实体数据库开发在代码先行的基础上逐步完善。

情况二:实体数据库本身已经存在下的开发步骤:

1.使用反向数据库工具生成代码类以及映射关系,即Model

2.修改Model,可以对Model做一些后期封装

3.同样可以应用Migration进行现行数据库的修改工作,并不影响以前的数据,只要为Migration修改提供默认值即可。

二、Code First实现动态建库

本来是需要我们自己手写类及映射关系,但是EF给我们提供了一种便利:VS——工具——扩展和更新——Entity Framework Power Tools Bata 4。

安装完了之后,在建好的类库上右击——Entity Framework—reverse engineer code first,然后按照提示,一步一步的创建代码。

2.1,需要修改的部分

注意:this.Database.CreateIfNotExists()是调用EF提供的方法,并不是自己创建的。

2.2,使用

<span style="font-family:KaiTi_GB2312;font-size:18px;">    public ActionResult CreateDatabase(string txtName,string txtSex) {

            Guid guidDatabaseLastNum = Guid.NewGuid();
string strDbName = "TestCrateDatabase" + guidDatabaseLastNum;
//连接字符串
string connectionString = "Data Source=*******; User=sa;Password=********;Initial Catalog=" + strDbName + ";Integrated Security=True"; TestCrateDatabaseContext newDb = new TestCrateDatabaseContext(connectionString);
return View();
} }
}</span>

点击按钮,新库就 被创建好了!

注意点:1,确保系统中Entity Framework的版本一致,不然会出现很多的问题。

2,注意创建表单中的字段是否含有关键字,当必须包含关键字 的时候,一定要人为的进行处理。

三、总结

其实,自己什么都没有做。而且这种实现,真的是超级简单,但是,之前自己为什么一直都不会,还很恐惧。。。我想这次是真的验证了不怕不知道,就怕不知道的名言了。本身EF是给我们提供这种便利的,但是由于自身的知识不足,都不知道有这些东西,所以才是一直都做不出来。

【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库的更多相关文章

  1. MYSQL动态查询拼接的表名的SQL脚本实现(MYSQL动态执行SQL脚本)

    可以使用MYSQL的预处理逻辑:https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html   例如: pr ...

  2. 使用CodeFirst实现动态建库

    一.业务分析 以我们平时注册今目标为例,我们在注册今目标的过程中,具体步骤是这样的: 图1 今目标登陆流程 详细解释一下: 第一步:注册界面.输入手机号或者邮箱,点击确定进入基本信息界面. 第二步:基 ...

  3. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  4. day 36 MySQL的库、表的详细操作

    MySQL的库.表的详细操作   MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset u ...

  5. [转]数据库中间件 MyCAT源码分析——跨库两表Join

    1. 概述 2. 主流程 3. ShareJoin 3.1 JoinParser 3.2 ShareJoin.processSQL(...) 3.3 BatchSQLJob 3.4 ShareDBJo ...

  6. Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表

     A库a表(红色为抽取字段): 关联用户表: B库b表(红色为抽取字段): 关联用户表  C目标库SYS_OPLOG表(c表) 利用kettle抽取A库a表(具体名称见上图),B库b表的上面红色框起来 ...

  7. MySQL的库、表的详细操作

    目录 MySQL的库.表的详细操作 一 库操作 二 表操作 MySQL的库.表的详细操作 本节目录 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset ...

  8. mysql语句1-创建库和表

    一.DDL数据定义语言 就是对书库内部的对象进行创建.删除.修改等操作的语言. 关键字:create  drop  alter 1.连接数据库 mysql -u用户名 -p -h指定主机(不指定默认是 ...

  9. 非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件

     非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通 ...

随机推荐

  1. Dynamic Median

    题意: 设计一个数据结构,初始为空,支持以下操作: (1)增加一个元素,要求在log(n)时间内完成,其中n是该数据结构中当前元素的个数.注意:数据结构中允许有重复的元素. (2)返回当前元素集合的中 ...

  2. canvas基础绘制-arc

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. html制作简单框架网页二 实现自己的影音驿站 操作步骤及源文件下载 (可播放mp4、avi、mpg、asx、swf各种文件的视频播放代码)

    新增视频播放功能如下图: 左侧网页left.html代码如下: <meta charset="utf-8"> <body style="backgrou ...

  4. k-window的关闭与打开设置

    // 打开弹框窗口 public showKwinDow() { const that = this as any; // 设置窗口居中 that.$refs['setAddEdit'].widget ...

  5. OCP 11g 第二章练习

    练习 2-1 在Windows计算机上安装SQL Developer 在本练习中,将在Windows计算机上安装SQL Developer 1. 从以下URL下载当前SQL Developer版本: ...

  6. [Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .

    递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...

  7. Android(java)学习笔记157:开源框架的文件上传(只能使用Post)

    1.文件上传给服务器,服务器端必然要写代码进行支持,如下: 我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Ap ...

  8. tree 树状构建

    /*package ch.util; import com.trm.model.func.FunctionTree; import java.util.HashMap; import java.uti ...

  9. Zend studio 修改编码格式

    一.临时修改编码格式 edit -> Set Encoding... -> Other(选择) 二.修改软件默认编码格式

  10. JavaEE-07 过滤器和监听器

    学习要点 过滤器 监听器 过滤器Filter 过滤器的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响 ...