.NET中微软实体框架的数据访问方法

本文详细介绍了微软的实体框架(Entity Framework)的三种数据访问方法:模型优先、数据库优先和代码优先。实体框架是ORM工具,用于简化数据库访问。模型优先方法是从模型生成数据库,数据库优先是从现有数据库生成模型,而代码优先则是在代码中定义模型和数据库结构。文中通过实例演示了如何使用这三种方法,并讨论了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

本文的目的是解释微软的实体框架提供的三种数据访问方法。网上有好几篇关于这个话题的好文章,但是我想以一个教程的形式更详细地介绍这个话题,这个教程对于开始学习实体框架及其方法的人来说是个入门。我们将逐步探索每个方法,通过这些方法,我们可以在应用程序中使用实体框架访问数据库和数据。我将使用实体框架版本6.2和.NETFramework 4.6。和Visual Studio 2017的教程。对于数据库,我们将使用SQLServer。如果没有安装SQLServer,则可以使用本地数据库。我将在本文中首先解释数据库和模型优先方法,并在下一篇文章中解释代码优先方法和代码优先迁移。

实体框架

微软实体框架是ORM(对象-关系映射)。维基百科的定义对于ORM和PITY非常简单。

计算机科学中的对象关系映射(ORM、O/RM和O/R映射工具)是一种使用面向对象的编程语言在不兼容类型系统之间转换数据的编程技术。实际上,这将创建一个可以从编程语言中使用的“虚拟对象数据库”。

作为一个ORM,实体框架是由Microsoft提供的数据访问框架,它有助于在应用程序中建立对象和数据结构之间的关系。它是通过传统的ADO.NET构建的,并作为ADO.NET上的包装器。它是对ADO.NET的一种增强,它以更加自动化的方式提供数据访问,从而减少了开发人员与连接、数据读取器或数据集的斗争。它是对所有这些的抽象,对它所做的贡献更为强大。开发人员可以对他所需要的数据、形式和数量有更多的控制权。没有数据库开发背景的开发人员可以利用实体框架和LINQ能力编写优化查询来执行DB操作。SQL或DB查询执行将由后台实体框架处理,它将处理可能发生的所有事务和并发问题。EntityFrameworkTutorial是一个网站,您可以通过它深入了解这个概念,并理解它的工作模型、体系结构等等。

实体框架方法

了解微软实体框架提供的三种方法是非常常见的。三种方法如下:

  1. 模型优先
  2. 数据库优先
  3. 代码优先

从数据模型类生成数据库。

从现有数据库生成数据模型类。

模型第一种方法说,我们有一个模型,该模型具有各种实体和关系/关联,使用该模型,我们可以生成一个数据库,最终将实体和属性转换为数据库表,列和关系将转换为外部分别是密钥。

数据库第一方法表示,我们已经有一个现有的数据库,我们需要在我们的应用程序中访问该数据库。我们可以直接从数据库创建实体数据模型及其关系,只需要几次单击即可开始从我们的代码访问数据库。所有实体,例如,类将由实体框架生成,实体框架可用于应用程序数据访问层以参与DB操作查询。

代码优先方法是EF的推荐方法,尤其是在从头开始开发应用程序时。您可以预先定义POCO类,以及它们的关系,并通过在代码中定义结构来想象数据库结构和数据模型的样子。最后,实体框架将负责为您的POCO类和数据模型生成数据库,并负责事务、历史和迁移。

通过这三种方法,您可以完全控制在任何时间点按需要更新数据库和代码。

模型优先

使用模型第一方法,开发人员可能不需要编写任何代码来生成数据库。实体框架提供了设计器工具,这些工具可以帮助您创建模型,然后从中生成数据库。这些工具更多的是拖放控件,它们只需要输入,比如实体名是什么、应该具有什么属性、与其他实体如何相关等等。用户界面是非常容易使用和有趣的。模型设计器(如果可以的话)将帮助您生成DDL命令,这些命令可以直接从Visual Studio或在您的数据库服务器上执行,以便从您创建的模型创建数据库。这将创建一个EDMX文件,该文件存储概念模型、存储模型和两者之间的映射信息。要了解概念模型和存储模型,可以参考本文介绍中所提供的链接。我能够看到的唯一缺点是,完全删除数据库并重新创建数据库将是这种方法的挑战。

数据库优先

当我们已经有一个现有的数据库并且需要在我们的应用程序中访问时,我们首先使用数据库的方法。使用实体框架为现有数据库建立数据访问方法将帮助我们在解决方案中生成上下文和类,通过这些上下文和类我们可以访问数据库。这是模型第一种方法的反面。这里,模型是通过数据库创建的,我们可以完全控制在模型中包括哪些表,以及包括哪些存储过程、函数或视图。您的应用程序可能是一个子应用程序,它不需要大型数据库的所有表或对象,因此您可以在这里自由地控制应用程序中所需的内容和应用程序中不需要的内容。每当数据库模式改变时,只需单击设计器或实体数据模型即可轻松更新实体数据模型,这将负责映射并在应用程序中创建必要的类。

代码优先

使用代码第一方法,开发人员的重点只在代码上,而不是在数据库或数据模型上。开发人员可以在代码本身中定义类及其映射,由于现在实体框架支持继承,所以更容易定义关系。实体框架负责为您创建或重新创建数据库,不仅如此,在创建数据库时,还可以提供种子数据。例如,当创建数据库时,您希望您的表具有主数据。首先使用代码,您可能没有具有关系和模式的.edmx文件,因为它不依赖于实体框架设计器及其工具,并且由于您是创建类和关系并管理数据库的人,因此将对数据库有更多的控制。出现了代码优先迁移的新概念,这使得代码优先方法更易于使用和遵循,但在本文中,我将不使用迁移,而是使用创建DB上下文和DB集类的旧方法,以便您了解隐藏的内容。代码优先方法还可以用于从现有数据库生成代码,因此它基本上提供了两种可以使用的方法。

行动中的实体框架方法

足够的理论,让我们从执行部分开始,一步一步地一步一步地探索和学习每一种方法。我将使用一个示例项目,并将其用于控制台应用程序,以使用实体框架连接数据库。我会用基本的样本表来解释这个概念。这里的目的是学习概念并实现它,而不是创建一个大的应用程序。When you learn it, you can use the concepts with any large enterprise level application or any big database server which can have thousands of tables. 所以,我们将遵循接吻策略,并在这里保持简单。

模型优先

  1. Create a simple .NET Framework console application by opening your visual studio and choosing the console application template. We can choose any application type like a web application that could be ASP.NET web forms, MVC or Web API or windows application/WPF application. You can give a name to the project and solution of your choice.

  2. We’ll have Program.cs, the only class and App.config in our project.

  3. Right-click the project and click on add a new item, this will open the window to add a new item, just go to Data as shown in below image and choose ADO.NET Entity Data Model as shown in the following image. Give it a name. For example, EFModel and click on Add.

  4. Once you click add, you’ll be shown to choose Model Contents, and this is the place where you choose what approach you want to use for data access out of the three EF approaches. So, choose Empty EF Designer because we would be using model first approach and create a model from scratch.

  5. Once you click "Finish", you see the empty designer window that is the .edmx file. The name of the .edmx file in solution is the name that we provided while adding the EF designer model. In the toolbox, you see the tools available that you could use to create entities and associations between them.

  6. Drag and drop the Entity tool from the toolbox into the designer. It will create an empty entity as shown below with on
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值