数据集或实体数据模型

时间:2012-02-29 23:50:25

标签: c# sql

请原谅noob问题,因为我不熟悉将数据与我的应用程序集成。我试图在网上找到答案,但还没有。

我有一个应用程序我在VS2010上用C#开发,它需要从数据库输入/输出数据。我试图弄清楚它在设置数据源时是否需要使用它的DataSet或实体数据模型。我的理解是,EDM允许我将数据库中的表/字段视为对象,但不知何故,我似乎也可以使用DataSet来处理它。

有些消息来源解释说,DataSet会生成数据库的缓存副本,然后可以对其进行操作。

基本上我的问题是我应该使用哪个以及哪个(dis)的优点是什么。

5 个答案:

答案 0 :(得分:11)

在数据库中存储和检索数据时,您可以选择几个选项:

  1. 在最简单的层面上,使用ADO.NET打开与DB的连接,创建命令并执行它。如果你期望得到结果(即SELECT ...),那么你可以调用命令ExecuteReader(...)。以这种方式工作可以实现非常快速的执行和最小的开销,但是你必须做更多的繁重工作。如果您的应用很简单,这可能是一个很好的方法。如果您的应用程序是或者可能更复杂,您可能需要考虑其他选项......
  2. ADO.NET DataSet是一种合理的DB IO机制,尤其适用于从DB读取数据。但是,在尝试更新数据库时,它们可能有点麻烦。
  3. 您可以使用像nHibernate或Entity Framework这样的对象关系映射器(ORM),但是,坦率地说,当您弄清楚如何将移动部件连接在一起并使它们在一起工作时,这通常会导致您的学习曲线急剧增加
  4. 您可能还会考虑一个名为Code First(CF)的实体框架的新变体:这使您可以设计代码,CF将生成您的EDM并处理构建系统所需的大部分数据库操作。 Scott Hanselman wrote up a nice intro into EF CF
  5. 在过去的20多年里,在Windows上使用了几乎所有的数据库API和ORM,我很高兴CF的形成方式!几周前发布的EF 4.3包括对CF的一些重要的新改进,包括允许您随着其发展而处理对数据库模式的更改的迁移。在过去的几个月里,我使用EF CF构建了3-4个系统,我非常高兴 - 这是我目前最喜欢的关系数据库IO机制。

    如果你想真正进入EF CF,I strongly recommend Julia Lerman's book EF CF - 这是一篇简短,写得很好,非常有用的指南,你应该花一两天的时间来完成主要部分。

    希望这有帮助。

答案 1 :(得分:5)

如果将LocalDB数据源添加到项目中(因为您需要一个小的本地数据库文件),那么当弹出数据源配置向导时,它会明确询问您是否要使用数据集或实体数据模型数据库模型。这是你面临的情况吗?这就是我带来的问题。

毫无疑问,对于企业级应用程序或网站,您可能想要调查ADO.NET或ORM,但它无助于回答这个问题,这与之间的差异有什么关系在向导中选择数据集与实体数据模型。

实质上,实体数据模型是最新技术。如果您不熟悉数据集,那么可能不是开始使用它的时候了。

答案 2 :(得分:2)

如果您在询问ADO.NET(DataSet)与EntityFramework(实体数据模型)的优缺点是什么,那么可以在ADO.NET Entity Framework or ADO.NET

进行讨论。 EF会让你快速上手,但在我(非常有限)的经历中,维持这种痛苦是很痛苦的。

是什么确定这些是你唯一的两种选择?您可以使用更多ORM。

答案 3 :(得分:1)

如果您的应用程序支持业务应用程序,那么查询很快就会变得复杂。在这种情况下,存储过程可以节省大量时间并且更易于维护,并且使用ADO.NET可以更好地工作。在几乎所有场景中,我建议使用存储过程和ADO.NET。尽可能多地将业务规则和逻辑移动到存储过程......以这种方式更容易维护。

仅使用数据集(数据表)来检索和读取数据。任何需要保存到数据库的数据都应该直接在数据库中进行操作...没有必要在数据集中执行,然后保存它。在多用户环境中,只要用户点击了“#34; save"”,就可以将更改保存到数据库中。

您可以(应该)在应用程序中使用业务对象进行业务逻辑过程。

让我们举一个简单的示例,说明您在哪里保存联系人(姓名,电话,电子邮件,地址等),然后检索今天添加的联系人列表......我建议您按照以下方式执行:

1)添加联系人 - 客户(网络或其他)收集数据 - >数据保存在联系人业务对象中 - >验证联系对象 - >调用存储库层以保存Contact对象(添加存储库层是有用的,但不是必需的,以保持数据层抽象来自客户端) - > Repository调用数据层来保存联系对象(这里是一个简单的ADO.NET调用,使用Command对象,可以调用存储过程来保存联系人在数据库中)。此用例中未使用任何数据集。

2)检索联系人列表 - 客户端调用存储库层以获取联系人列表 - >存储库层调用数据层来检索数据 - >这里将数据列表作为数据集(数据表)检索 - >将数据表返回给客户端,让客户端在呈现数据时直接从数据表中读取数据。甚至可以将单个联系人检索为数据集。

P.S:ORM几乎总是矫枉过正。它几乎总是被使用,因为某些开发人员喜欢保持一切面向对象...所以即使它没有任何用处(恕我直言),也会添加一个额外的层。

答案 4 :(得分:0)

但是,如果您有可用于许多不同应用程序的业务逻辑(存储过程),该怎么办? 因此取决于:如果您为具有不同后端存储的不同用户创建应用程序,或者为那些不经常更改后端存储的用户创建了许多应用程序。 拥有独立于应用程序(内部或外部)的数据库完整性和规则非常重要

相关问题