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
All blogs in the database:
ADO.NET 博客
Press any key to exit...

?
?

5.处理数据库更改

现在,可以对数据库架构进行一些更改,在进行这些更改时,还需要更新模型,从而反映这些更改。

第一步是对数据库架构进行一些更改。我们将向架构添加一个用户表。

  • 在服务器资源管理器中,右键单击?DatabaseFirst.Blogging?数据库,然后选择"新建查询"
  • 将以下 SQL 复制到新查询中,右键单击该查询,然后选择"执行"

CREATE?TABLE?[dbo].[Users]?(?????????[Username]?NVARCHAR(50)?NOT?NULL?PRIMARY?KEY,??????[DisplayName]?NVARCHAR(MAX)?NULL?)
							

在更新架构之后,用这些更改来更新模型。

  • 在 EF 设计器中,右键单击模型上的空位置,然后选择"从数据库更新模型...",这会启动更新向导
  • 在更新向导的"添加"选项卡上,选中"表"旁边的框,这表示需要从架构添加新表。

    "刷新"选项卡显示出模型中的所有现有表,在更新期间,将检查这些表有无更改。"删除"选项卡显示出已从架构删除并且在更新期间还将从模型删除的所有表。有关这两个选项卡的信息将被自动检测到,并仅出于参考目的而提供,您无法更改任何设置。

  • 单击更新向导上的"完成"

?
?

模型进行更新,包括映射到我们已添加到数据库的用户表的新 User 实体。

时间: 2024-10-10 23:02:32

EntityFramwork(2Database First) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542的相关文章

事件函数块的返回值https://msdn.microsoft.com论述

REF:https://msdn.microsoft.com Event Summary When an event has multiple subscribers, the event handlers are invoked synchronously when an event is raised. To invoke events asynchronously, see Calling Synchronous Methods Asynchronously. 下面讲述我遇到的引发事件时,

使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]

看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. 但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法(即异步编程),该方法利用 .NET Framework 4.5 和 Windows 运行时中

https://docs.microsoft.com/zh-cn/windows/uwp/layout/design-and-ui-intro

https://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.uielement.holding.aspx UWP事件 样式与模板 https://msdn.microsoft.com/zh-cn/library/windows/apps/mt299107.aspx xmal主题资源 https://docs.microsoft.com/zh-cn/windows/uwp/controls-and-patterns/x

MFC基础--C++中的字符集(转自MSDN)http://msdn.microsoft.com/zh-cn/library/06b9yaeb(v=vs.90).

为国际市场开发应用程序的一个重要方面就是要适当地表示本地字符集.ASCII 字符集在 0x00 到 0x7F 的范围内定义字符.还有其他一些字符集(主要是欧洲字符),它们在 0x00 到 0x7F 的范围内定义与 ASCII 字符集相同的字符,还在 0x80 到 0xFF 的范围内定义了扩展字符集.因此,8 位的单字节字符集 (SBCS) 足以表示 ASCII 字符集以及许多欧洲语言的字符集.但是,一些非欧洲字符集(如日文汉字)包含许多单字节代码方案无法表示的字符,因此要求使用多字节字符集 (M

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 Microsoft Office 2010 requires that MSXML version 6.10.1129.0 be installed on your computer" https://answers.microsoft.com/en-us/office/forum/office_20

distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/

缺少依赖或者说版本不对 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/e7/a7/4cd50e57cc6f436f1cc3a7e8fa700ff9b8b4d471620629074913e3735fb2/cffi-1.11.5.tar.gz (438 kB) ERROR: Command errored out with exit status 1: command: 'c:\users\tangxx\envs\hengzhi\s

sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL\data\itsm_Data.MDF'。数据库 'my1' 正在使用该文件的解决方案

对数据库备份进行还原时遇到“sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL\data\itsm_Data.MDF'.数据库 'my1' 正在使用该文件”的问题. 产生原因:对一个数据库备份文件在两个数据库中进行还原时,这个问题的出现主要是因为还原第一个数据库和第二个数据库的名称是一样的,而且在第二个数据库还原时的物理路径时选的路径和第一个数据库还原路径一样. 解决方案:

记录一下访问https报doesn‘t contain CN or DNS sub错误

版本说明 httpclinet:4.3.1jdk:1.6tomcat:6 异常信息 Caused by: javax.net.ssl.SSLException: Certificate for <**> doesn't contain CN or DNS subjectAlt at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:178) at org.apache.http.conn.ssl.Bro

zzLinux 中直接 I/O 机制的介绍https://www.ibm.com/developerworks/cn/linux/l-cn-directio/

直接 I/O 的动机 在介绍直接 I/O 之前,这一小节先介绍一下为什么会出现直接 I/O 这种机制,即传统的 I/O 操作存在哪些缺点. 什么是缓存 I/O (Buffered I/O) 缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O.在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址