自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

翻译 EF 6 Code-First系列--EF 6 Code-First中的默认约定

约定是一组默认规则,在使用Code-First时,这些规则会根据域类自动配置概念模型。正如你在前一章的Code-First示例中看到的,EF API配置了域类中的主键、外键、关系、列数据类型等,而没有任何额外的配置。这是因为EF Code-First约定。如果在域类中遵循它们,那么数据库模式将基于约定进行配置。这些EF 6.x Code-First约定定义在System.Data.Entity.ModelConfiguration.Conventions命名空间中。

2024-01-18 05:00:00 94

翻译 EF 6 Code-First系列--EF Code-First示例

在前一章中,我们在项目中安装了entity framework。在这里,我们将创建一个简单的code-first示例。让我们假设要为XYZ学校创建一个简单的应用程序。这个学校应用程序的用户应该能够添加和更新学生、成绩、教师和课程信息。与其先设计数据库表,不如在需要时开始为school domain创建类。首先,创建Student和Grade类,其中每个Student都与一个Grade相关联,如下所示。这被称为一对多关系。创建Grade类,如下所示。现在,我们已经完成了学校应用的初始域类。

2024-01-16 05:00:00 137

翻译 EF 6 Code-First系列--安装Entity Framework框架

为了使用Code-First,您需要在Visual Studio的项目中安装EntityFramework.dll (EF API)。在这里,我们将在Visual Studio中使用NuGet包管理器安装Entity Framework 6 API。(你可以在任何版本的Visual Studio中通过NuGet安装EF。在解决方案资源管理器中右键单击您的项目,并选择管理NuGet包…这将打开管理NuGet包对话框。在左上方的搜索框中搜索EntityFramework并按Enter。

2024-01-14 05:00:00 128

翻译 EF 6 Code-First系列--什么是Code-First

Entity Framework 4.1引入了Code-First的方法。Code-First主要用于领域驱动设计。在Code-First的方法中,您专注于应用程序的领域,并开始为域实体创建类,而不是先设计数据库,然后再创建与数据库设计匹配的类。下图演示了Code-First的方法。正如您在上图中所看到的,EF API将基于您的域类和配置创建数据库。这意味着你需要先用c#或VB.NET开始编码,然后EF将从您的代码创建数据库。

2024-01-12 10:22:29 84

翻译 Entity Framework中的Model-First模式

在Model-First中,直接在EDMX的设计器中创建实体、关系和继承层次结构,然后从模型生成数据库。首先,在Visual Studio的解决方案资源管理器中右键单击项目,添加新的实体数据模型(2012/2015/2017)-> add -> new Item。这将打开“添加新项目”弹出框。在弹出窗口中,选择ADO.NET实体数据模型,为EDM提供适当的名称,然后单击Add按钮。这将打开实体数据模型向导。选择Empty EF Designer模型并在向导中单击Finish,如下所示。

2024-01-01 05:00:00 80

翻译 EF 6 DB-First系列--Entity Framework中的事务

在这里您将了解EF 6 & EF Core中的事务。在Entity Framework中,SaveChanges()方法在内部创建一个事务,并将所有的INSERT、UPDATE和DELETE操作包装在其中。多个SaveChanges()调用,创建单独的事务,执行CRUD操作,然后提交每个事务。下面的示例演示了这一点。上面的示例将向控制台显示以下输出。在上面的示例中,我们将所有数据库命令记录到控制台。

2023-12-30 21:45:04 113

翻译 EF 6 DB-First系列--在Entity Framework中拦截数据库命令

在这里,您将学习如何拦截EF 6中DbContext执行的数据库命令。EF 6通过实现IDbCommandInterceptor接口提供了拦截上下文的能力。IDbCommandInterceptor接口包括一些方法,这些方法可以拦截DbContext的实例,并允许你在上下文执行命令或查询之前或之后执行你的自定义逻辑。

2023-12-29 05:00:00 139

翻译 EF 6 DB-First系列--在Entity Framework中显示sql语句

在这里,您将学习如何记录Entity Framework 6发送到数据库的命令和查询。在EF 6之前,我们使用数据库跟踪工具或第三方跟踪实用程序来跟踪实体框架发送的数据库查询和命令。现在,EF 6提供了DbContext.Database.Log属性来记录DbContext生成的SQL。Log属性是Action类型的,所以你可以用字符串参数附加一个委托方法并返回void。下面的示例演示了将EF活动记录到控制台。

2023-12-27 05:00:00 206

翻译 EF 6 DB-First系列--Entity Framework中基于代码的配置

Entity Framework 6引入了基于代码的配置。现在,您可以使用之前在app.config的部分中配置的代码配置实体框架相关设置。但是,app.config优先于基于代码的配置。换句话说,如果在代码和app.config中都设置了配置选项,那么将使用app.config中的设置。让我们看看如何使用Entity Framework 6实现基于代码的配置。:EF不支持在同一个AppDomain中使用多个配置类。如果使用此属性为两个上下文设置不同的配置类,则会引发异常。

2023-12-25 05:00:00 81

翻译 EF 6 DB-First系列--在Entity Framework设计器中使用颜色

从Visual Studio 2012开始,您可以更改设计器中实体的颜色,以便在设计器中很容易看到相关的实体组。要更改实体的颜色,在设计器中选择实体→进入属性窗口(按F4)→更改填充颜色属性。例如:要一次更改多个实体的颜色,请选择多个实体并从属性窗口更改填充颜色:此外,您还可以将实体的属性格式更改为仅具有实体名称或名称和类型。右键单击设计器→选择“标量属性格式”→选择“显示名称”或“显示名称和类型”,如下图所示:属性将显示其类型,如下所示:这样,您就可以在设计器中更改实体的颜色和显示样式。

2023-12-24 05:00:00 48

翻译 EF 6 DB-First系列--Entity Framework中EDM的多个图表

大型数据库的实体数据模型(EDM)将所有实体显示到单个可视化设计器中。这使得在设计器上组织和识别实体变得困难。Visual Studio(2012/2015/2017)提供了一种工具,可以将实体数据模型的可视化表示拆分为多个图表。要为您的EDM创建一个新的图表,在设计器表面上右键单击打开模型浏览器,并在上下文菜单中选择模型浏览器。在Model Browser中,您将看到您的EDM的一个现有图。通过右键单击模型浏览器中的图表节点并选择“添加新图表”来创建一个新的图表,如下所示。这将创建一个新的图表。

2023-12-23 13:41:42 54

翻译 EF 6 DB-First系列--在Entity Framework中验证实体

您可以为任何实体编写自定义服务器端验证。要做到这一点,重写DbContext的ValidateEntity方法,如下所示。正如您在上面的代码中看到的,我们正在验证Student实体。如果StudentName为空,那么我们将DBValidationError添加到DBEntityValidationResult中。无论何时你调用DbContext.SaveChanges方法并尝试保存没有StudentName的Student实体,然后它将抛出一个DbEntityValidationException。

2023-12-16 05:00:00 61

翻译 EF 6 DB-First系列--Entity Framework中的表值函数

表值函数与存储过程类似,只有一个关键区别:TVF的结果是可组合的,这意味着它可以用于LINQ-to-Entity的查询。下面是SQL Server数据库中的示例TVF GetCourseListByStudentID,它将返回特定学生的所有课程。现在,更新您的EDM,并通过右键单击设计器->选择从数据库更新模型,将这个TVF添加到您现有的EDM中,如下图所示。

2023-12-14 05:00:00 58

翻译 EF 6 DB-First系列--Entity Framework中的数据库视图

在这里,我们将看到如何使用Entity Framework 6 Dabase-First方法查询数据库视图。您可以像使用表一样使用视图。首先,你需要向EDM添加数据库视图。它将视图视为一个实体。因此,除了CUD(创建、更新、删除)操作外,您可以像处理普通实体一样使用它。我们已经在我们的数据库中有一个视图View_StudentCourse,我们想要执行并使用EF 6从它读取数据。要从db视图中读取数据,首先我们需要将它添加到我们的EDM(实体数据模型)中。这可以在创建新的EDM或更新现有EDM时添加。

2023-12-12 05:00:00 216

翻译 EF 6 DB-First系列--Entity Framework中的空间数据类型

MS SQL Server 2008引入了两种空间数据类型,geography(地理数据)和geometry(几何数据)。geography表示圆地球坐标系中的数据,geometry表示欧几里得(平面)坐标系中的数据。从EF 5.0版本开始,它在System.Data.Entity.Spatial命名空间中包含了特殊的数据类型:DbGeography用于地理数据类型,DbGeometry用于SQL Server中的几何数据类型。

2023-12-10 13:20:52 69

翻译 EF 6 DB-First系列--Entity Framework中的Enum

Enum在Entity Framework 5.0以后得到支持。Enum可以在以下情况下使用:1、从EDM设计器将实体的现有属性转换为枚举类型。2、使用来自不同命名空间的现有enum类型。

2023-12-01 05:00:00 78

翻译 EF 6 DB-First系列--Entity Framework中的变更跟踪

在这里,您将了解Entity Framework如何在实体的生命周期内跟踪实体上的更改。实体框架支持在上下文的生命周期内对加载的实体进行自动更改跟踪。DbChangeTracker类提供了上下文正在跟踪的当前实体的所有信息。请注意,每个实体必须有一个键(主键)属性,以便由上下文跟踪(EF、EF Core中主键的重要性)。实体框架不会在概念模型中添加任何没有EntityKey属性的实体。正如您在上面的示例代码片段和输出中所看到的,每当我们查询、添加、修改或删除实体时,上下文都会跟踪实体。

2023-11-29 05:00:00 42

翻译 EF 6 DB-First系列--DbEntityEntry类

DbEntityEntry是一个重要的类,在检索关于实体的各种信息时非常有用。你可以通过使用DbContext的Entry方法获得一个特定实体的DBEntityEntry实例。DbEntityEntry使您能够访问实体状态,以及给定实体的所有属性的当前值和原始值。下面的示例代码展示了如何检索特定实体的重要信息。DbEntityEntry允许您设置一个EntityState,如下所示。

2023-11-27 05:00:00 73

翻译 EF 6 DB-First系列--在Entity Framework中使用存储过程的CUD操作

在前一章中,我们已经了解了如何使用存储过程读取数据。在本章中,当我们调用database-first方法中的SaveChanges()方法时,我们将使用存储过程对实体进行CUD(创建、更新、删除)操作。我们将为Student实体使用以下存储过程:1、sp_InsertStudentInfo:插入一个新的学生记录到数据库中2、sp_UpdateStudent:更新学生记录3、sp_DeleteStudent:删除数据库中的学生记录。下面是每个存储过程的SQL脚本。

2023-11-26 10:47:51 108

翻译 EF 6 DB-First系列--Entity Framework中的存储过程

Entity Framework能够基于LINQ-to-Entities或Entity SQL查询自动为数据库构建本地命令,以及构建用于插入、更新和删除数据的命令。您可能希望重写这些步骤,并使用您自己的预定义存储过程。您可以使用存储过程获取数据,也可以为一个或多个数据库表添加/更新/删除记录。EF API为目标数据库中的每个存储过程和用户定义函数(UDF)在EDM中创建一个函数,而不是一个实体。让我们使用存储过程从数据库中获取数据。

2023-11-10 05:00:00 100

翻译 EF 6 DB-First系列--Entity Framework中的并发性

Entity Framework默认支持乐观并发。EF将实体数据保存到数据库中,假设自加载实体以来没有更改相同的数据。如果它发现数据已更改,则抛出异常,您必须在再次尝试保存数据之前解决冲突。要使用EF 6 database-first方法处理并发性,请在SQL Server中的表中创建一个数据类型为rowversion(时间戳)的列。rowversion(同义词时间戳)数据类型只是一个递增的二进制数,对于在包含rowversion列的表上执行的每次插入和更新操作,该二进制数都会递增。

2023-11-08 05:00:00 83

翻译 EF 6 DB-First系列--EntityFramework中添加或删除多个实体

Entity Framework 6引入了一次性添加和删除实体集合的方法。DbSet.AddRange()方法将一个实体集合附加到具有Added状态的上下文中,它将在数据库中为SaveChanges()上的所有实体执行INSERT命令。以同样的方式,DbSet.RemoveRange()方法附加了一个具有Deleted状态的实体集合,该集合将依次为SaveChanges()上的所有实体执行DELETE命令。使用AddRange和RemoveRange方法添加或删除实体可以提高性能。

2023-11-06 05:00:00 158

翻译 EF 6 DB-First系列--EF 6中的异步查询和保存方法

在. net 4.5中引入了异步执行,这在实体框架中很有用。EF 6允许我们使用DbContext实例异步执行查询和命令。让我们先看看如何执行异步查询,然后,我们将看到一个对context.SaveChanges的异步调用。

2023-11-04 10:39:39 185

翻译 EF 6 DB-First系列--在EF 6中删除未被跟踪的实体

删除一个断开连接的实体很容易。只需使用Entry()方法将其状态设置为Delete,如下所示。在上面的例子中,Student实体的实例只包含studententid键属性。要删除一个实体,只需要一个键属性。context.Entry(student).State = System.Data.Entity.EntityState.Deleted将实体附加到上下文,并将其状态设置为Deleted。这将在数据库中执行以下DELETE命令。

2023-10-20 05:30:00 68

原创 不处理业务逻辑的死循环占用cpu暴涨问题

有人说,不用死循环不就行了吗!但是,实际业务中,有可能会用到循环来不停的刷新数据以及更新数据操作,所以循环还是得用的,那怎么来进行优化呢?

2023-10-19 05:30:00 95

翻译 EF 6 DB-First系列--在EF 6中保存未被跟踪的实体图

在前一章中,您学习了如何保存断开连接的单个实体。在这里,您将了解如何保存断开连接的实体图。在断开连接的场景中更新实体图是一项复杂的任务,需要仔细考虑设计。更新断开连接的实体图的问题在于上下文不知道在客户端对它执行了什么操作。如下图所示,新的上下文不知道每个实体的状态:在调用SaveChages()方法之前,我们需要识别实体图中每个实体的状态。有不同的模式可以识别实体状态,我们在使用实体框架设计数据层时需要考虑这些模式。这里我们将使用key属性来标识实体状态。

2023-10-18 05:30:00 42

翻译 EF 6 DB-First系列--在EF 6中保存未被跟踪的单个实体

在本章中,您将学习如何保存EF 6中没有被上下文跟踪的断开连接的实体。在断开连接的场景下保存数据与在连接的场景下保存数据略有不同。在断开连接的场景中,DbContext实例不知道断开连接的实体,因为这些实体是在当前DbContext实例的范围之外创建或修改的。因此,您需要将断开连接的实体附加到具有适当EntityState的上下文,以便在数据库中执行INSERT或UPDATE操作。在断开连接的场景中,您需要找出一个实体是新的还是现有的,并据此设置EntityState。

2023-10-16 05:30:00 50

翻译 EF 6 DB-First系列--在EF 6中附加未被跟踪实体的方法

在这里,您将了解Entity Framework 6.x中将断开连接的实体附加到上下文的不同方法。所谓断开连接的实体是指: 一个普通的POCO类,其并未被纳入EF的DbContext上下文管理范围内,即DbContext无法跟踪其状态。在断开连接的场景下保存实体与在已连接的场景下保存实体不同。当我们得到一个不连接的实体图或者甚至是单个不连接的实体时,我们需要做两件事。首先,我们需要将实体附加到新的上下文实例中,并使上下文知道这些实体。

2023-10-14 12:09:16 53

翻译 EF 6 DB-First系列--Entity Framework中的查询--显示加载

在这里,您将学习如何显式地加载实体中的导航实体。显式加载在EF 6和EF Core中是有效的。即使禁用了延迟加载(在EF 6中),仍然可以延迟加载相关实体,但必须通过显式调用来完成。使用Load()方法显式加载相关实体。考虑下面的例子。在上面的例子中,context.Entry(student).Reference(s => s.StudentAddress).Load()加载StudentAddress实体。Reference()方法用于获取指定引用导航属性的对象,Load()方法显式加载它。

2023-10-06 05:00:00 63

翻译 EF 6 DB-First系列--Entity Framework中的查询--延迟加载

延迟加载是延迟相关数据的加载,直到您特别请求它。它与立即加载相反。例如,Student实体包含StudentAddress实体。在延迟加载中,上下文首先从数据库加载Student实体数据,然后当我们访问StudentAddress属性时,它将加载StudentAddress实体,如下所示。上面显示的代码将导致两个SQL查询。

2023-10-05 05:00:00 93

翻译 EF 6 DB-First系列--Entity Framework中的查询--立即加载

立即加载是这样一个过程,即对一种类型实体的查询也将相关实体作为查询的一部分加载,这样我们就不需要对相关实体执行单独的查询。使用()方法实现立即加载。在下面的示例中,它使用Include()方法从数据库中获取所有学生及其标准。

2023-10-04 05:00:00 47

翻译 EF 6 DB-First系列--Entity Framework中的查询--Native SQL(原生sql)查询

Entity Framework支持三种类型的查询:1) LINQ-to-Entities, 2) Entity SQL, and 3) Native SQLEntity Framework允许您为底层关系数据库执行原始SQL查询。

2023-10-03 05:00:00 141

翻译 EF 6 DB-First系列--Entity Framework中的查询--Entity SQL查询

Entity Framework支持三种类型的查询:1) LINQ-to-Entities, 2) Entity SQL, and 3) Native SQLEntity SQL是创建查询的另一种方式。它由Entity Framework的对象服务直接处理。它返回ObjectQuery而不是IQueryable。您需要一个ObjectContext来使用Entity SQL创建查询。更多Entity SQL的使用方法请参考其他资料。

2023-10-02 05:00:00 95

翻译 EF 6 DB-First系列--Entity Framework中的查询--Linq-to-Entities查询

Entity Framework支持三种类型的查询:1) LINQ-to-Entities, 2) Entity SQL, and 3) Native SQL在这里,您将学习如何编写linq到实体的查询,并在Entity Framework 6.x 中获得结果,同样也适用于 Entity Framework Core。DbSet类派生自IQuerayable。因此,我们可以使用LINQ对DbSet进行查询,这将会被转换为SQL查询。

2023-10-01 05:15:00 174

翻译 EF 6 DB-First系列--在连接场景下保存数据

在连接的场景中保存实体数据是一项相当简单的任务,因为上下文会自动跟踪实体在其生命周期内发生的更改。所谓连接场景是指: 被纳入EF的DbContext上下文管理范围内的实体类,即DbContext可以跟踪其各种改变的状态。在这里,我们将使用在创建实体数据模型章节中创建的相同的EDM进行CRUD操作。在其标量属性中包含数据的实体将根据其EntityState被插入、更新或删除。在Entity Framework中,有两种持久化场景用于保存实体数据:连接和断开连接。

2023-09-28 05:00:00 71

翻译 EF 6 DB-First系列--Entity Framework中实体与实体之间的映射关系

在这里,您将了解Entity framework如何管理实体之间的关系。Entity framework支持三种类型的关系,与数据库一样:1)一对一2)一对多3)多对多。我们已经在创建实体数据模型一章中为SchoolDB数据库创建了一个实体数据模型。下图显示了该EDM的视觉设计器以及所有实体和它们之间的关系。让我们看看entity framework是如何管理每个关系(关联)的。

2023-09-26 20:31:01 179

翻译 EF 6 DB-First系列--Entity Framework中的DbSet

DbSet类表示可用于创建、读取、更新和删除操作的实体集。上下文类(派生自DbContext)必须包含映射到数据库表和视图的实体的DbSet类型属性。EntityEntityStudentStudentStudentStudentStudent有关DbSet的更多信息请访问MSND(https://msdn.microsoft.com/enus/library/system.data.entity.dbset(v=vs.113).aspx)。

2023-09-15 05:00:00 170

翻译 EF 6 DB-First系列--Entity Framework中的DbContext(数据库上下文)

正如您在前面的创建实体数据模型一节中所看到的,EDM包括从System.Data.Entity.DbContext类派生的SchoolDBEntities类,如下所示。派生DbContext的类在实体框架中称为上下文类。DbContext是实体框架API中的一个重要类。它是域或实体类与数据库之间的桥梁。DbContext是负责与数据库交互的主要类。: 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。: 跟踪从数据库查询后实体上发生的更改。

2023-09-12 05:00:00 318

原创 在指定路径下快速打开DOS界面(Windows中)

在路径栏中输入 cmd 然后回车,即可使打卡的 DOS 界面直接定位到该路径下。

2023-09-10 12:09:34 246

翻译 EF 6 DB-First系列--模型浏览器

在上一节中,我们创建了第一个Entity Data Model。EDM的视觉设计器不会显示它创建的所有对象。它只显示映射到数据库表和视图的实体。模型浏览器为您提供关于EDM创建的所有对象和函数的信息。要打开模型浏览器,右键单击EDM设计器的空白处,并从上下文菜单中选择EDM designer。EDM designer将出现在您通常找到解决方案资源管理器和属性的区域。模型浏览器包含关于EDM的所有信息、它的概念模型、存储模型和映射信息,如下所示。: 模型浏览器包含EDM的可视化图表。

2023-09-08 05:00:00 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除