最近看了国外几个项目,发现用EntityFramework做Code First的项目现在很流行。

最让我有兴趣的一个功能则是,EntityFramework对于数据库的安装和升级的无缝完美支持,且很容易。

当然现在很多项目都是Dabase Frist出来的,也就是先有数据库后有C#代码,而且数据库当中一般都包含stored procedure(存储过程),user-defined table什么的。

那EntityFramework 的migration是否也支持了?最近试了一下,找到了一个方法但不一定是最优解,供参考。

1. “升级VS2013到Update4”,使用database first我们需要用到Entity Framework Power Tool Beta4. 这个只有升级了VS2013之后才会有。否则需要自己另外下载

2. “引用EntityFramework”, 建立一个Class Library项目"DataAccess",右击项目名,通过Nuget来引用EntityFramework

3. “加入Item,ADO.NET Entity Data Model”, 右击上面新加的项目“DataAccess”,在弹出菜单选择“Add New Item”。在Data分类中选择“ADO.NET Entity Data Model”。(可在项目下建一个DataModel的目录,然后右击该目录,选择“Add New Item”,这样数据模型可以建于该目录下)

4. “选择Code First From Database”,这个选项只有完成了第一步才会出现。不要选择“EF Designer From Database”,这个是不支持升级的。

5. “连接数据库”, Wizard会跳出窗口指定一个要连接的的数据库。输入用户名,密码

6. “生成数据模型”, 选择需要逆向工程的表和视图(大家可能看到了,这里根本没有存储过程或其它类型的数据选项,怎么解决?微软没告诉我们,我查了些资料找到了一个解决方案,后面将提到)

7. “打开Package Management Console”, 在Tool-->Nuget Package Manager中打开“Package Management Console

8."Enable Migration", 在“Package Management Console”中 敲入命令Enable-Migrations –ContextTypeName [ContextName], [ContextName]名字可以自己取。这个命令执行完后会在项目中自动添加“Migrations”目录,升级记录都将放在这个目录之下

9. "Add Migration", 在“Package Management Console”中 敲入命令 Add-Migration Initial [–IgnoreChanges], –IgnoreChanges 是可选参数,如果是针对已有的数据库产生升级则需要使用,如果是空的数据库则不需要该参数。 这个命令将会在“Migrations” 目录下生成创建初始化版本的数据库的c#代码

10. “使用Update Database"命令可将数据模型,更新到任何一个数据库

数据库表和视图都很容易就实现了可升级,那么存储过程和其它数据类型怎么办呢?一个可以考虑的想法是,存储过程和其它数据类型可能和数据表有一些区别,数据表升级需要保持原来的数据什么的,而存储过程根本不需要太多考虑以前的状态,大可以每次升级将旧的删除然后重新产生新的存储过程。

1. 从数据库导出生成存储过程的sql scripts, 可取名为Create_StoredFunctions.sql

2. 建一个Sql目录,将脚本Create_StoredFunctions.sql放置于下

3.为了方便使用,可创建一个Resource文件,将Create_StoredFunctions.sql拖入资源文件当中

4.在Up函数中调用,资源文件,执行Create_StoredFunctions.sql脚本来创建存储过程

5. 相应的在Down函数调用中可以调用Delete_StoredFunctions.sql脚本来删除所有的存储过程

删除脚本可参看下面

  1. /* Drop all non-system stored procs */
  2. DECLARE @name VARCHAR(128)
  3. DECLARE @SQL VARCHAR(254)
  4.  
  5. SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])
  6.  
  7. WHILE @name is not null
  8. BEGIN
  9. SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
  10. EXEC (@SQL)
  11. PRINT 'Dropped Procedure: ' + @name
  12. SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
  13. END
  14. GO
  15.  
  16. /* Drop all functions */
  17. DECLARE @name VARCHAR(128)
  18. DECLARE @SQL VARCHAR(254)
  19.  
  20. SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])
  21.  
  22. WHILE @name IS NOT NULL
  23. BEGIN
  24. SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
  25. EXEC (@SQL)
  26. PRINT 'Dropped Function: ' + @name
  27. SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
  28. END
  29. GO
  30.  
  31. /* Drop all table_schema */
  32. DECLARE @DropSQL nvarchar(max)
  33.  
  34. SELECT @DropSQL = coalesce(@DropSQL + ',', 'DROP TABLE ') + quotename(table_schema) + '.' + quotename(table_name)
  35.  
  36. FROM INFORMATION_SCHEMA.Tables T WHERE T.TABLE_TYPE = 'BASE TABLE'
  37.  
  38. execute(@DropSQL)

参考文献

1.SUPPORT FOR STORE FUNCTIONS (TVFS AND STORED PROCS) IN CODE FIRST (ENTITY FRAMEWORK 6.1)

http://blog.3d-logic.com/2014/04/09/support-for-store-functions-tvfs-and-stored-procs-in-entity-framework-6-1/

2. Code First to an Existing Database

https://msdn.microsoft.com/en-us/data/jj200620

3.Code First Migrations with an existing database

https://msdn.microsoft.com/en-us/data/dn579398.aspx

4.Using Entity Framework With an Existing Database: Data Access

https://www.simple-talk.com/dotnet/.net-framework/using-entity-framework-with-an-existing-database-data-access/

5.Entity Framework 6 Code First Migrations

http://community.sharpdevelop.net/blogs/mattward/archive/2013/12/23/EntityFramework6CodeFirstMigrations.aspx

6.Can you create sql views / stored procedure using Entity Framework 4.1 Code first approach

http://stackoverflow.com/questions/7667630/can-you-create-sql-views-stored-procedure-using-entity-framework-4-1-code-firs

Database first with EntityFramework (Migration)安装和升级的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. Oracle10G无图形安装及升级

    Oracle10.2.0.1静默安装及升级到10.2.0.4 下载及解压好database和Disk1 环境配置: su - oracle vim ~/.bash_profile 保存. vim /d ...

  3. hive的安装和升级

    目录 [toc] 安装 升级 安装 nohup hive –service hiveserver & 启动: sudo nohup ./hive --service metastore &am ...

  4. 在 Linux 虚拟机中手动安装或升级 VMware Tools

    对于 Linux 虚拟机,您可以使用命令行工具手动安装或升级 VMware Tools. 本次Linux 虚拟机为CentOS6.5 先决条件开启虚拟机.确认客户机操作系统正在运行.由于 VMware ...

  5. 24.Mysql高级安装和升级

    24.Mysql高级安装和升级24.1 Linux/Unix平台下的安装 24.1.1 安装包比较Linux下的Mysql安装包分为RPM包.二进制包.源码包3种.RPM包优点是安装简单,适合初学者: ...

  6. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  7. Centos MySQL 5.7安装、升级教程

    MySQL 5.7安装.升级笔记分享: 卸载当前的 MySQL 查看当前 MySQL 版本: ? 1 2 [root@coderknock ~]# mysql -V mysql Ver 14.14 D ...

  8. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  9. 转载 在 Linux 虚拟机中手动安装或升级 VMware Tools

    http://pubs.vmware.com/workstation-12/index.jsp?lang=zh_CN&topic=/com.vmware.ws.using.doc/GUID-0 ...

随机推荐

  1. ABP(现代ASP.NET样板开发框架)系列之14、ABP领域层——领域事件(Domain events)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之14.ABP领域层——领域事件(Domain events) ABP是“ASP.NET Boilerplate P ...

  2. ABP源码分析二十三:Authorization

    Permission:用于定义一个Permission,一个permission可以包含多个子Permission. PermissionDictionary:继承自Dictionary<str ...

  3. ASP.NET免费服务器~支持MVC和Net4.5

    1.先注册一个号.地址:https://appharbor.com/ 2.看看有没有你需要的插件,基本上都是免费的 3.本地创建git库 4.复制git远程仓库的地址 5.推送到远程仓库 6.查看自己 ...

  4. SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

    1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...

  5. 读书笔记--SQL必知必会05--高级数据过滤

    5.1 组合使用WHERE子句 操作符(operator)也称为逻辑操作符(logical operator),用来联结或改变WHERE子句中的过滤条件. 5.1.1 AND操作符 在WHERE子句中 ...

  6. 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包

    0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...

  7. (转)从P1到P7——我在淘宝这7年

    (一) 2011-12-08 [原文链接] 今天有同事恭喜我,我才知道自己在淘宝已经七周年了.很多人第一句话就是七年痒不痒,老实说,也曾经痒过,但往往都是一痒而过,又投入到水深火热的工作中去.回家之后 ...

  8. 来,一起让我们越来越懒,面向CSS、JS未来编程。(9.28已更新)

    2016.10.29更新 本文存在大量的错误,仅供参考. 不知不觉在前端领域马上一个年头就要过去了,然而再看看自己的代码,果然够烂,那么为什么代码一直没有用面向对象的思维去写CSS呢?首先有两点:一点 ...

  9. iFrame 功能详解

    目录索引: 一. 简介二. 属性三. 功能四. 应用 一.简介 网页“帧”的概念最早是由Netscape所提出,当时全部由“帧”构成的页面,也被称之为 “框架集”页面,在一个“框架集”页面中,“帧” ...

  10. ubuntu学习的简单笔记

    l vi编辑器开发步骤 A)输入 vi Hello.java B) 输入 i 插入模式. C)输入 冒号.[保存退出:wq][退出不保存:q!] l 列出当前目录的所有文件:ls 详细信息的列表:ls ...