数据集与带有存储过程的实体框架

2024-02-26

整个问题已被重写以更加清晰..

新项目设计:

  1. SQL Server 2012
  2. Visual Studio 2012.Net 4.5
  3. 业务逻辑将在存储过程中实现
  4. ASP.Net 网络表单
  5. WCF SOAP XML Web 服务使用 DBA 提供的存储过程与数据库进行通信
  6. 实体框架或数据集

在这里我可以使用数据集 - 没问题,但我想更详细地解释实体框架相对于数据集的优势。我一直在阅读有关实体框架的文章,并且由于以下原因,我发现人们使用 EF 比使用数据集有更好的体验。

我想知道在我的例子中使用 EF 是否仍然具有这些优势 - 与数据库相关的操作始终通过存储过程完成:

  1. EF 更干净、更容易维护和编程。 针对 EF ObjectContext 的查询始终针对数据库执行

  2. 因为对象和数据库之间的映射是以声明方式指定的,而不是在代码中指定的,所以如果您需要更改数据库模式,您可以最大限度地减少对应用程序中必须修改的代码的影响——因此系统提供了一定程度的抽象有助于将应用程序与数据库隔离。因此,EF 可以取代您必须自己编写和维护的大量代码。(如果存储过程设计已更改怎么办?)

  3. EF 经过专门构建,可将映射查询/塑造结果的过程与构建对象和跟踪更改分开。

  4. 数据集很糟糕,尤其是在 WCF 场景中(它们增加了处理内存数据操作的大量开销)-> 意味着 EF 与 WCF 的性能更好?


1. EF 更干净,更容易维护和编程 ->> 你能详细说明一下吗?.. 这是因为下面的#2 吗?

EF 是一个对象关系映射器 (ORM),将自动生成与数据库模式相关的对象,如#2 中所述。 EF 是数据访问层的开箱即用抽象,在当前版本中实现了存储库模式。这为您带来了诸如 LINQ、对象图 CRUD 操作以及 EF 团队认为的通过 .NET 访问数据的最佳实践等优势。

开箱即用的功能以及与数据库(特别是 SQL Server)易于集成可以使维护和编程变得更加容易。然而,在某些情况下,使用 ORM 可能不是最佳选择,您应该谨慎判断。以下是一些不使用 ORM 的场景(特别是当您的团队缺乏 EF 的当前知识时):有限的数据查询、不复杂的应用程序、舒适地编写或使用数据访问层、您的应用程序截止日期很紧迫等。请参阅我在下面提到的其他选项。

2. 如果您需要更改数据库模式,您可以最大限度地减少对应用程序中必须修改的代码的影响->>如果存储过程的参数和返回字段发生更改怎么办? EF仍能将影响降到最低吗?

是的,EF 基于 EDMX 文件生成,该文件只是数据库架构的 XML 文件。这包括更新映射到存储过程的对象(注意:如果在 EF6 发布之前首先使用代码,则这不适用)。您可以更改存储过程,EF 可以采用更新后的架构并更新您的代码。但是,您必须修复调用 EF 存储过程方法且参数已更改的代码。如果您对 EF 感到不舒服,您也可以使用 LINQ to SQL,因为 EF 将提供存储过程调用作为对象方法。

3. DataSet 很糟糕,尤其是在 WCF 场景中(它们为处理内存数据操作增加了大量开销)->> 您能解释更多吗?

“数据集很糟糕”显然是一个笼统的说法。您使用数据集的目的是使用 .NET 处理内存中的数据。由于数据集位于内存中,因此在执行简单的 CRUD 操作时,它们被认为效率低下。建议使用存储过程和数据读取器(读取数据后请务必关闭它们),以便通过 SQL 数据库进行高效的数据读取。

除了 EF 之外还有其他选项:

  1. 自己动手 - 编写存储过程、使用数据读取器并映射到 POCO 对象

  2. 使用动态库 - Dapper、ServiceStack ORM Lite、简单 POCO、简单数据、海量

  3. 使用 LINQ to SQL - 轻量级数据访问层(仅适用于 SQL Server)

  4. 其他 ORM - NHibernate 是首选。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据集与带有存储过程的实体框架 的相关文章

随机推荐

  • 在 Spring Boot 中更新应用程序的配置

    当我运行 Spring Boot 应用程序时 在 Spring Boot 错误中更新应用程序的配置 maven构建成功 但是错误依然存在 我应该做什么来改变克服这个错误 Spring Boot
  • Javascript/jQuery:从画布中删除形状/路径

    我似乎找不到在创建画布后从画布中删除形状或路径的功能 所以我在两点之间创建一条贝塞尔曲线 beginPath bezierCurveTo stroke closePath 创建后如何将其从画布中删除 我需要能够通过调用删除函数toggle
  • 确定神经网络的适当神经元数量

    我一直在对神经网络进行一些研究 整个概念和理论对我来说很有意义 尽管我一直无法找到答案的一个问题是神经网络中应该使用多少个神经元 以获得正确 有效的结果 包括隐藏层 每个隐藏层的神经元等 更多的神经元一定会得到更准确的结果 同时对系统造成更
  • 打印当前的随机种子,以便我稍后可以使用 set.seed() 输入它

    我是这里的 R 新手 假设我有一行代码 set seed 123456 然后我想获取值 123456 以便我可以将其打印出来用于文档目的 并且如果需要的话可以在将来的某个时候重新输入该值 那么我如何获得该种子呢 请注意 我可能会注释掉上面的
  • 使用具有重叠列名的 Pandas 连接多个数据框?

    我有多个 超过 2 个 数据框想要合并 它们都共享相同的值列 In 431 x head for x in data Out 431 AvgStatisticData DateTime 2012 10 14 14 00 00 39 3359
  • 设置 android 按钮不可见,但仍附加 onClick 侦听器

    所以目前我正在我的应用程序中放入一个复活节彩蛋 我想要Button不可见 但单击时 Rick roll 到目前为止 当我说 Button setVisibility view VISIBLE Button setBackgroundColo
  • Zeppelin 无法在 docker 上加载:logErrors docker zeppelin

    我遇到的第一个问题是 如果不指定版本标签 我无法提取基本映像 这没什么大不了的 但我发现这很奇怪 在那之后 docker pull apache zeppelin 0 8 2 之后我就可以获得图像 但我尝试将其运行为 docker run
  • 是否可以在 [win-builder](http://win-builder.r-project.org/) 上构建使用 Rcpp 和 Boost.Thread 的 R 包?

    最近做了一个R包 使用Rcpp来集成R和C C 库 Boost 用于多线程 我想知道我的包是否可以构建在http win builder r project org http win builder r project org 我发现定义了
  • 使用正则表达式限制文本字段/数字字段中的输入字符?

    我在 ExtJS Form 中使用 numberField 并只想输入 0 99 范围内的正数 并且它应该只接受 2 个字符 且不超过 2 个 xtype textfield allowNegative false allowDecimal
  • SwiftUI 中的比例高度(或宽度)

    我开始探索 SwiftUI 但找不到一种方法来获得简单的东西 我希望 View 具有成比例的高度 基本上是其父级高度的百分比 假设我有 3 个垂直堆叠的视图 我想 第一个高度为 其父级高度 的 43 第二个高度为 其父级高度的 37 最后一
  • 如何在逻辑应用程序中循环遍历数组?

    我已设法将所有用户数据放入数组中 请参阅here https stackoverflow com questions 59107093 how to store all azure ad user group members in an a
  • 使用 C++、libpng 和 OpenMP 并行化 PNG 文件创建

    我目前正在尝试在 C 中实现一个基于 libpng 的 PNG 编码器 它使用 OpenMP 来加速压缩过程 该工具已经能够从各种图像格式生成 PNG 文件 我将完整的源代码上传到pastebin com 这样你就可以看到我到目前为止所做的
  • 在 null Laravel 上调用成员函数 Roles()

    我正在 Laravel 中使用户角色发挥作用 一切都工作正常 但从任何地方都出现错误 调用成员函数 Roles 或 null 这是我发送请求的 html td td
  • 未授权端点,请检查设置->安全->远程站点设置端点

    我无法通过 Twilio API 发送短信 我得到了以下异常 ERROR 未授权端点 请检查设置 gt 安全 gt 远程站点设置 端点 url global class SampleSMSTest future callout true p
  • 将项目添加到 Linux 内核链表

    我在用linux list h在我的用于实现队列 堆栈行为的代码中 头部 尾部添加API如下 static inline void list add struct list head new struct list head head li
  • 缓冲区溢出攻击(攻击实验室第 2 阶段)

    我有一个缓冲区溢出实验室 我必须为一个名为攻击实验室 http csapp cs cmu edu 3e attacklab pdf 我处于实验室的第二阶段 我必须将代码作为漏洞利用字符串的一部分注入 以使程序指向函数 touch2 的地址
  • 数据库连接和 OutOfMemoryError:Java 堆空间

    去年夏天 我制作了一个 Java 应用程序 它可以解析一些 PDF 文件并获取它们包含的信息并将其存储在 SQLite 数据库中 一切都很好 我每周左右都会向数据库添加新文件 没有任何问题 现在 我正在尝试提高应用程序的速度 我想看看如果我
  • 将广告注入 Google Chrome 扩展程序

    我正在开发一个 google chrome 扩展 并计划使用允许的功能注入广告 我检查过 广告行为 前面写着 此扩展程序将广告注入一些第三方网站 我的问题是 如何以及在哪里提及广告来源 比如说 如果我想显示 google adsense 我
  • PhoneGap 的 Flash 插件

    我正在phonegap 中开发一个html css javascript 应用程序 在该应用程序中 我需要一个 JavaScript 的 Flash 插件编码 以便为我的应用程序目的启用音频 视频 如果有人知道解决方案 请尽快回复我 您必须
  • 数据集与带有存储过程的实体框架

    整个问题已被重写以更加清晰 新项目设计 SQL Server 2012 Visual Studio 2012 Net 4 5 业务逻辑将在存储过程中实现 ASP Net 网络表单 WCF SOAP XML Web 服务使用 DBA 提供的存