请原谅noob问题,因为我不熟悉将数据与我的应用程序集成。我试图在网上找到答案,但还没有。
我有一个应用程序我在VS2010上用C#开发,它需要从数据库输入/输出数据。我试图弄清楚它在设置数据源时是否需要使用它的DataSet或实体数据模型。我的理解是,EDM允许我将数据库中的表/字段视为对象,但不知何故,我似乎也可以使用DataSet来处理它。
有些消息来源解释说,DataSet会生成数据库的缓存副本,然后可以对其进行操作。
基本上我的问题是我应该使用哪个以及哪个(dis)的优点是什么。
答案 0 :(得分:11)
在数据库中存储和检索数据时,您可以选择几个选项:
在过去的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)
但是,如果您有可用于许多不同应用程序的业务逻辑(存储过程),该怎么办? 因此取决于:如果您为具有不同后端存储的不同用户创建应用程序,或者为那些不经常更改后端存储的用户创建了许多应用程序。 拥有独立于应用程序(内部或外部)的数据库完整性和规则非常重要