导读:在上篇博客中,介绍了使用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. RHEL6.5----LVS(NAT)

    主机名 IP  所需软件  master 192.168.30.130(Nat) 192.168.17.130(VMnet4) ipvsadm  node-1 192.168.17.131  http ...

  2. PowerShell~发布你的mvc网站

    通过使用ps加上msbuild可以方便的编译你的.net应用程序,并且可以把它发布到你的磁盘上,部署非常方例! 我们在c盘添加一个hello网站,解决方案名是hello.sln,它的网站是hello. ...

  3. [转]Android 完美退出 App (Exit)

    本文转自:http://blog.csdn.net/zeus_9i/article/details/7259881 最近两天为了解决Android上面退出程序问题折腾了半死,在google & ...

  4. C#实现较为实用的SQLhelper

    第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新 ...

  5. 浅析cookie

    基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中. 以博客园为例,我们看看cookie有哪些属性:  1.Name:cookie的名称: 2. ...

  6. Android基础夯实--重温动画(二)之Frame Animation

    心灵鸡汤:天下事有难易乎,为之,则难者亦易矣:不为,则易者亦难矣. 摘要 当你已经掌握了Tween Animation之后,再来看Frame Animation,你就会顿悟,喔,原来Frame Ani ...

  7. Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:jar:2.5.1

    Mac上写了一段基于Maven的java代码. 上传Git后,在windows上pull下来,eclipse里面各种错误. ArtifactTransferException:Failure to t ...

  8. http://blog.chinaunix.net/uid-9845710-id-1996675.html snmpd配置

    http://blog.chinaunix.net/uid-9845710-id-1996675.html http://lihuipeng.blog.51cto.com/3064864/643960 ...

  9. SAP云平台架构概述

    在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品.这些云产品方案可以分为公有云和私有云两种. SAP公有云解决方案见下图最右侧,比较著名的有SAP SuccessFac ...

  10. fgetpos, fseek, fsetpos, ftell, rewind - 重定位某个流

    总览 (SYNOPSIS) #include <stdio.h> int fseek(FILE *stream, long offset, int whence); long ftell( ...