如何用Entity Framework数据库优先代码创建SQL Server数据库及恢复误删库?
关于Entity Framework数据库优先及数据库恢复的解答
嘿,针对你的两个问题,我来一步步给你讲清楚:
一、用Entity Framework数据库优先方式创建SQL Server数据库
先澄清个小概念:数据库优先(Database-First)的常规流程是先有SQL Server数据库,再基于它生成EF模型。但如果你已经有了通过数据库优先生成的EDM(实体数据模型)代码,想要反向创建对应的数据库,这完全可行,有两种常用方法:
方法1:借助EF迁移功能快速创建
- 打开Visual Studio 2017的包管理器控制台(Package Manager Console),先启用迁移:
- 执行命令:
Enable-Migrations -EnableAutomaticMigrations - 这会在项目里生成
Migrations文件夹和相关配置文件
- 执行命令:
- 创建初始迁移脚本:
- 执行:
Add-Migration InitialCreate -IgnoreChanges - 这个命令会生成一个初始迁移,跳过当前模型和空数据库的差异检测(毕竟现在数据库还不存在)
- 执行:
- 执行迁移创建数据库:
- 敲命令:
Update-Database - EF会自动读取你项目里的数据库连接字符串,连接到指定的SQL Server实例,创建对应的数据库和所有表结构
- 敲命令:
方法2:生成SQL脚本手动执行
- 打开你的EDM设计器(就是那个
.edmx文件) - 在设计器空白处右键,选择生成数据库脚本来自模型...
- 跟着向导走,选择目标SQL Server的连接信息,EF会自动生成完整的建库、建表SQL脚本
- 把脚本复制到SQL Server Management Studio(SSMS)里执行,数据库就建好了
二、用已有的EDM代码恢复误删的数据库
当然可以!你手里的EDM代码(包括.edmx模型、实体类、DbContext)已经包含了完整的数据库结构信息,完全能用来重建数据库,步骤和上面创建数据库的方法一样:
- 先确认项目里的数据库连接字符串是对的——要指向你原来的SQL Server实例,数据库名称填你误删的那个
- 如果用迁移:直接在包管理器控制台执行
Update-Database,EF会发现数据库不存在,自动根据模型重建整个库的结构 - 如果用脚本:打开
.edmx生成SQL脚本,在SSMS里执行就行
划重点:这种方法只能恢复数据库的表、列、约束等结构,如果原来的数据库里有数据,那数据是找不回来的(除非你有单独的数据备份)。但表结构能100%通过EDM模型恢复。
内容的提问来源于stack exchange,提问作者Danish Ali
相关产品推荐
相关产品推荐

