📝 实体框架教程
48篇技术文档📅  最后修改于: 2020-11-21 07:19:39        🧑  作者: Mango
任何数据访问开发人员在回答有关数据并发的问题时都会遇到困难,“如果一个以上的人同时编辑同一数据会发生什么?”我们当中最幸运的人处理的业务规则是:“没问题,最后一个获胜。”在这种情况下,并发不是问题。更有可能的是,它不是那样简单,并且没有解决所有情况的灵丹妙药。默认情况下,实体框架将采用“获胜的最后一个”的路径,这意味着即使有人在检索时间数据和保存时间数据之间更新了数据,也将应用最新更新。让我们举个...
📅  最后修改于: 2020-11-21 07:20:00        🧑  作者: Mango
在Entity Framework的所有版本中,每当执行SaveChanges()来插入,更新或删除数据库时,该框架都会将该操作包装在事务中。当您调用SaveChanges时,上下文将自动启动事务并根据持久性是否成功进行提交或回滚。这对您来说都是透明的,并且您将不需要处理它。此事务仅持续很长时间以执行操作,然后完成。当您执行另一个这样的操作时,新的事务开始。实体框架6提供以下内容-Database...
📅  最后修改于: 2020-11-21 07:20:27        🧑  作者: Mango
视图是一个对象,其中包含通过预定义查询获得的数据。视图是虚拟对象或表,其结果集来自查询。它与真实表非常相似,因为它包含数据的列和行。以下是视图的一些典型用法-过滤基础表的数据出于安全目的过滤数据集中分布在多个服务器上的数据创建可重用的数据集可以使用与使用表类似的方式来使用视图。要将视图用作实体,首先需要将数据库视图添加到EDM。将视图添加到模型后,除了创建,更新和删除操作外,您可以使用与普通实体相...
📅  最后修改于: 2020-11-21 07:20:54        🧑  作者: Mango
索引是基于表和视图的磁盘数据结构。在大多数情况下,索引使数据检索更快,更有效。但是,用索引重载表或视图可能会不愉快地影响其他操作(如插入或更新)的性能。索引是实体框架中的新功能,您可以在其中通过减少从数据库中查询数据所需的时间来提高Code First应用程序的性能。您可以使用Index属性将索引添加到数据库中,并覆盖默认的“唯一”和“群集”设置,以获得最适合您的方案的索引。让我们看一下以下代码,...
📅  最后修改于: 2020-11-21 07:21:37        🧑  作者: Mango
实体框架允许您使用实体数据模型中的存储过程来代替其自动命令生成,或者与其结合使用。您可以使用存储过程在数据库表上执行预定义的逻辑,并且许多组织都有适当的策略要求使用这些存储过程。它还可以指定EF应该使用您的存储过程来插入,更新或删除实体。尽管动态构建的命令是安全,高效的,并且通常比您自己编写的命令好或更好,但是在许多情况下,存储过程已经存在,并且您的公司实践可能会限制直接使用表。另外,您可能只想对...
📅  最后修改于: 2020-11-21 07:22:10        🧑  作者: Mango
在本章中,让我们看一下如何对上下文未跟踪的实体进行更改。未被上下文跟踪的实体称为“断开连接”实体。对于大多数单层应用程序,其中用户界面和数据库访问层在同一应用程序进程中运行,您可能只在对上下文跟踪的实体执行操作。在N层应用程序中,断开实体的操作更为常见。N层应用程序涉及在服务器上获取一些数据,然后通过网络将其返回给客户端计算机。然后,客户端应用程序在将该数据返回给服务器进行持久化之前对其进行操作。...
📅  最后修改于: 2020-11-21 07:22:54        🧑  作者: Mango
在本章中,让我们学习如何使用Entity Framework Designer映射表值函数(TVF),以及如何从LINQ查询中调用TVF。当前仅在数据库优先工作流程中支持TVF。它是在Entity Framework版本5中首次引入的。要使用TVF,您必须以.NET Framework 4.5或更高版本为目标。它与存储过程非常相似,但有一个关键的区别,即TVF的结果是可组合的。这意味着TVF的结果...
📅  最后修改于: 2020-11-21 07:23:16        🧑  作者: Mango
在实体框架中,您可以使用LINQ查询实体类。您还可以使用原始SQL通过DbCOntext直接对数据库运行查询。可以将这些技术同等地应用于使用Code First和EF Designer创建的模型。现有实体的SQL查询DbSet上的SqlQuery方法允许编写原始SQL查询,该查询将返回实体实例。上下文将跟踪返回的对象,就像它们是由LINQ查询返回的对象一样。例如-上面的代码将从数据库中检索所有学生...
📅  最后修改于: 2020-11-21 07:24:16        🧑  作者: Mango
在Entity Framework中,此功能将允许您在作为枚举类型的域类上定义属性,并将其映射到整数类型的数据库列。然后,当查询和保存数据时,实体框架将在相关枚举之间来回转换数据库值。枚举类型在处理具有固定数量响应的属性时具有各种好处。使用枚举时,应用程序的安全性和可靠性都会提高。枚举使用户更难犯错误,并且不存在注入攻击之类的问题。在实体框架中,枚举可以具有以下基础类型-字节16位32位整数64字...
📅  最后修改于: 2020-11-21 07:24:43        🧑  作者: Mango
异步编程涉及在后台执行操作,以便主线程可以继续其自己的操作。这样,主线程可以在后台线程处理手头任务时使用户界面保持响应。Entity Framework 6.0支持用于查询和保存数据的异步操作。异步操作可以通过以下方式帮助您的应用程序-使您的应用程序对用户交互更加敏感提高应用程序的整体性能您可以通过多种方式执行异步操作。但是.NET Framework 4.5中引入了async / await关键...
📅  最后修改于: 2020-11-21 07:25:16        🧑  作者: Mango
现在,实体框架使您可以从实体框架中受益,而不必强迫应用程序的每个部分都知道实体框架,从而将实体与基础架构分开。您可以创建专注于其业务规则的类,而无需考虑它们的持久性(数据的存储位置以及对象之间数据的来回传输方式)。创建持久的无知实体上一段描述了一种方法,该方法对其消耗的数据源没有任何了解。这突显了持久性无知的本质,那就是当您的类以及我们周围的许多应用程序层不在乎数据的存储方式时。在.NET 3.5...
📅  最后修改于: 2020-11-21 07:25:56        🧑  作者: Mango
LINQ到实体理解LINQ to Entities的最重要概念之一是它是一种声明性语言。重点在于定义所需的信息,而不是如何获取信息。这意味着您可以花费更多的时间来处理数据,而花费更少的时间来尝试找出执行诸如访问数据库之类的任务所需的基础代码。重要的是要理解,声明性语言实际上并没有从开发人员那里删除任何控件,但是它有助于开发人员将注意力集中在重要的内容上。LINQ to实体基本关键字了解用于创建LI...
📅  最后修改于: 2020-11-21 07:26:19        🧑  作者: Mango
在Entity Framework 6.0中,引入了一个新功能,称为Logging SQL。在使用Entity Framework时,它会将命令或等效的SQL查询发送到数据库以执行CRUD(创建,读取,更新和删除)操作。Entity Framework的此功能是捕获由Entity Framework内部生成的等效SQL查询,并将其作为输出提供。在Entity Framework 6之前,每当需要跟...
📅  最后修改于: 2020-11-21 07:26:40        🧑  作者: Mango
在Entity Framework 6.0中,还有另一个新功能称为“拦截器”或“拦截”。侦听代码是围绕侦听接口的概念构建的。例如,IDbCommandInterceptor接口定义在EF调用ExecuteNonQuery,ExecuteScalar,ExecuteReader和相关方法之前调用的方法。实体框架可以通过使用拦截真正发挥作用。使用这种方法,您可以暂时捕获更多信息,而不必使代码混乱。要实...
📅  最后修改于: 2020-11-21 07:27:03        🧑  作者: Mango
在Entity Framework 5中引入了空间类型支持。还包括一组运算符,以允许查询分析空间数据。例如,查询可以基于两个地理位置之间的距离进行过滤。实体框架将允许新的空间数据类型作为类的属性公开,并将它们映射到数据库中的空间列。您还将能够编写LINQ查询,这些查询利用空间运算符基于数据库中执行的空间计算进行过滤,排序和分组。有两种主要的空间数据类型-地理数据类型存储椭球数据,例如GPS纬度和经...