EntityFramwork(2Database First) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542
必备条件
要完成本演练,需要安装 Visual Studio 2010 或 Visual Studio 2012。
如果使用的是 Visual Studio 2010,还需要安装 NuGet。
1.创建现有数据库
通常情况,是面向一个已创建的现有数据库,但在本演练中,我们需要创建一个数据库进行访问。
随 Visual Studio 安装的数据库服务器根据所安装的 Visual Studio 的版本而有所不同:
- 如果使用 Visual Studio 2010,则将创建 SQL Express 数据库。
- 如果使用的是 Visual Studio 2012,则将创建 LocalDb 数据库。
我们继续生成数据库。
- 打开 Visual Studio
- "视图"->"服务器资源管理器"
- 右键单击"数据连接"->"添加连接..."
- 如果尚未从服务器资源管理器连接至数据库,则需要选择 Microsoft SQL Server 作为数据源

- 根据已安装的数据库,连接到 LocalDb ((localdb)\v11.0) 或 SQL Express (.\SQLEXPRESS),然手输入 DatabaseFirst.Blogging 作为数据库名称


- 选择"确定",系统将询问是否要创建新数据库,选择"是"

- 新数据库此时出现在服务器资源管理器中,右键单击该数据库,然后选择"新建查询"
- 将以下 SQL 复制到新查询中,右键单击该查询,然后选择"执行"
CREATE TABLE [dbo].[Blogs] (
[BlogId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (200) NULL,
[Url] NVARCHAR (200) NULL,
CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);
CREATE TABLE [dbo].[Posts] (
[PostId] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (200) NULL,
[Content] NTEXT NULL,
[BlogId] INT NOT NULL,
CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);
2.创建应用程序
为简单起见,我们将生成一个基本控制台应用程序,它使用 Database First 执行数据访问:
- 打开 Visual Studio
- "文件"->"新建"->"项目…"
- 从左侧菜单中选择"Windows"和"控制台应用程序"
- 输入 DatabaseFirstSample 作为名称
- 选择"确定"
3.对模型进行反向工程处理
我们使用 Visual Studio 中的实体框架设计器来创建模型。
- "项目"->"添加新项..."
- 从左侧菜单中选择"数据",然后选择"ADO.NET 实体数据模型"
- 输入 BloggingModel 作为名称,然后单击"确定"
- 这会启动实体数据模型向导
- 选择"从数据库生成",然后单击"下一步"

- 选择连接到在第一部分中创建的数据库,输入 BloggingContext 作为连接字符串的名称,然后单击"下一步"

- 单击"表"旁边的复选框,导入所有表,然后单击"完成"

反向工程处理完成后,新模型将添加到项目中并在实体框架设计器中打开以便查看。项目中还添加了一个 App.config 文件,其中含有数据库的连接详细信息。

Visual Studio 2010 中的其他步骤
如果用的是 Visual Studio 2010,则需要执行一些其他步骤升级到实体框架的最新版本。升级十分重要,因为升级后才能访问经过改进的 API 图面以及最新的 Bug 修复,改进的 API 图面使用起来更为方便。
首先,需要从 NuGet 获取实体框架的最新版本。
- "项目"–>"管理 NuGet 程序包…"
如果没有"管理 NuGet 程序包..."选项,则应安装 NuGet的最新版本 - 选择"联机"选项卡
- 选择"EntityFramework"程序包
- 单击"安装"
接下来,需要交换模型,生成利用实体框架的早期版本中引入的 DbContext API 的代码。
- 在 EF 设计器中,右键单击模型上的空位置,选择"添加代码生成项..."
- 从左侧菜单中选择"联机模板",然后搜索"DbContext"
- 选择"EF 5.x DbContext Generator for C#",输入名称 BloggingModel,然后单击"添加"

4.读写数据
我们已有了模型,现在可以使用模型来访问一些数据。用于访问数据的类是基于 EDMX 文件自动生成的。
此屏幕快照来自 Visual Studio 2012,如果使用的是 Visual Studio 2010,则 BloggingModel.tt 和 BloggingModel.Context.tt 文件直接位于项目下面,而不是嵌套在 EDMX 文件下面。

实现 program.cs 中的 Main 方法,如下所示。这些代码为上下文创建一个新实例,然后使用该实例插入新博客。之后,它使用 LINQ 查询检索数据库中的所有博客(按标题的字母顺序进行排序)。
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
现在,可以运行应用程序,对其进行测试。
|
Enter a name for a new Blog: ADO.NET Blog |
5.处理数据库更改
现在,可以对数据库架构进行一些更改,在进行这些更改时,还需要更新模型,从而反映这些更改。
第一步是对数据库架构进行一些更改。我们将向架构添加一个用户表。
- 在服务器资源管理器中,右键单击 DatabaseFirst.Blogging 数据库,然后选择"新建查询"
- 将以下 SQL 复制到新查询中,右键单击该查询,然后选择"执行"
CREATE TABLE [dbo].[Users]
(
[Username] NVARCHAR(50) NOT NULL PRIMARY KEY,
[DisplayName] NVARCHAR(MAX) NULL
)
在更新架构之后,用这些更改来更新模型。
- 在 EF 设计器中,右键单击模型上的空位置,然后选择"从数据库更新模型...",这会启动更新向导
- 在更新向导的"添加"选项卡上,选中"表"旁边的框,这表示需要从架构添加新表。
"刷新"选项卡显示出模型中的所有现有表,在更新期间,将检查这些表有无更改。"删除"选项卡显示出已从架构删除并且在更新期间还将从模型删除的所有表。有关这两个选项卡的信息将被自动检测到,并仅出于参考目的而提供,您无法更改任何设置。

- 单击更新向导上的"完成"
模型进行更新,包括映射到我们已添加到数据库的用户表的新 User 实体。

EntityFramwork(2Database First) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542的更多相关文章
- EntityFramwork(1) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542
1.创建应用程序 简单起见,我们将构建一个使用 Code First 执行数据访问的基本控制台应用程序. 打开 Visual Studio "文件"->"新建&qu ...
- 适应c++ 新特性 - 与我 - 多年传统方式开发(新特性参考微软标准:https://msdn.microsoft.com/zh-cn/library/hh279654.aspx)
公司同事都在积极使用c++的新特性,并对其赞不绝口,而自己一直做着传统的c++开发方式,到底这些新特性如何,又是怎么提高开发效率的,我依然在疑问当中,从同事的说法和实际代码操练里,确实在减少代码量,集 ...
- C# EF使用性能消耗列表 https://msdn.microsoft.com/zh-cn/library/cc853327.aspx
性能注意事项(实体框架) .NET Framework (current version) 其他版本 本主题介绍 ADO.NET 实体框架的性能特征,并提供一些注意事项帮助改善实体框架应用程序 ...
- 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.asp ...
- 解决download.msdn.microsoft.com无法正确解析而无法下载的问题
不知何时,微软 MSDN 订阅软件下载服务IP解析有问题,总是在点击“下载”按钮之后无法打开. 想必又跟“国情”有关,我是使用联通宽带,没测试过电信的. 我是可以通过指定hosts entry来解决: ...
- wpf msdn在线地址http://msdn.microsoft.com/zh-cn/library/ms752324(v=vs.110).aspx
http://msdn.microsoft.com/zh-cn/library/ms752324(v=vs.110).aspx
- 微软人工智能公开课 https://mva.microsoft.com/colleges/microsoftai#!jobf=Developer
https://mva.microsoft.com/colleges/microsoftai#!jobf=Developer
- 资源下载https://msdn.itellyou.cn/
资源下载https://msdn.itellyou.cn/ 迅雷
- https://support.microsoft.com/zh-cn/help/2290714/error-message-when-you-install-office-2010-on-a-windows-7-based-comput
Error message when you install Office 2010 on a Windows 7-based computer "The installation of M ...
随机推荐
- 【EF 3】浅谈ADO数据模型生成串(一):csdl,ssdl,msl分析
导读:这段经历,真的是难以忘怀.恨得我牙痒痒,就一个字符串拼接,前前后后尽然报了不下30个错.有的错很快就能调出来,有的错调一天.两天,是真的可以的.最终总结了一下,这些错很大一部分原因是对于EF生成 ...
- Linux 下多核CPU知识
1. 在Linux下,如何确认是多核或多CPU: #cat /proc/cpuinfo 如果有多个类似以下的项目,则为多核或多CPU: processor : 0 ...... processor ...
- windows7安装远程服务器AD域管理工具
目的:在win7上安装“远程服务器管理工具”,这样可以在客户端进行对服务器的AD域的操作,避免了远程登陆进服务器的麻烦. 前提条件:一般此工具只有管理员才具有有效使用权限,所以,在域administr ...
- grep,awk和sed的常用命令和语法
Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...
- Python之路【第七篇】:线程、进程和协程
Python之路[第七篇]:线程.进程和协程 Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- crontab的使用说明
网上瞎转载的,仅供参考 名称 : crontab 使用权限 : 所有使用者 使用方式 : crontab file [-u user]-用指定的文件替代目前的crontab. crontab-[-u ...
- C#获取本周周一的日期
/// <summary> /// 获取本周的周一日期 /// </summary> /// <returns></returns> public st ...
- Knockout.Js官网学习(click绑定)
前言 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用在button,input和连接a上,但是可以在任意元素上使用. 简单示例 <h ...
- ThinkPHP之中的验证码的小示例
ThinkPHP之中已经封装好了验证码的调用,但是关于手册,缺失了HTML之中以及.实际操作之中的点击ajax就会刷新验证码ajax代码:现在分享一下:看客老爷们注意啦! 放大招啦!!!三分归元气-- ...
- PHP面向对象之旅:static变量与方法
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”. 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“ ...