sb.*_*sb. 6 .net c# ado.net strongly-typed-dataset visual-studio
我需要一些关于ADO.NET中由Visual Studio生成的强类型数据集的专家建议.这是详细信息.先感谢您.
我想编写一个N层应用程序,其中表示层是C#/ windows表单,Business Layer是Web服务,数据访问层是SQL db.
因此,我使用了Visual Studio 2005,并在解决方案中创建了3个项目.
项目1是数据访问层.在这里我使用visual studio数据集生成器来创建一个强类型数据集和表适配器(测试我在northwind的customers表上创建了它).数据集称为NorthWindDataSet,其中的表是CustomersTable.
project 2有一个Web服务,它只公开了一个GetCustomersDataSet方法.这使用project1库的表适配器来填充数据集并将其返回给调用者.为了能够使用NorthWindDataSet和表适配器,我添加了对项目1的引用.
project 3是一个win form app,它使用Web服务作为参考,并调用该服务来获取数据集.
在构建此应用程序的过程中,在PL中,我在项目1中添加了对上面生成的DataSet的引用,并在表单的加载中调用Web服务并将从Web服务接收的DataSet分配给此数据集.但我得到错误:
无法将类型'PL.WebServiceLayerReference.NorthwindDataSet'隐式转换为'BL.NorthwindDataSet'e:\ My Documents\Visual Studio 2008\Projects\DataSetWebServiceExample\PL\Form1.cs
两个数据集都相同,但因为我添加了来自不同位置的引用,我认为我得到了上述错误.
所以,我做的是我将项目1(定义数据集)的引用添加到项目3(UI)并使用Web服务获取DataSet并确定正确的类型,现在当项目3(其中)有web表单运行,我得到以下运行时异常.
System.InvalidOperationException:XML文档中存在错误(1,5058).---> System.Xml.Schema.XmlSchemaException:元素' http://tempuri.org/NorthwindDataSet.xsd:Customers '的多个定义导致内容模型变得模糊不清.必须形成内容模型,使得在元素信息项序列的验证期间,可以在不检查元素信息项序列的内容或属性的情况下,直接地,间接地或隐含地包含在其中依次用于尝试验证序列中的每个项目的粒子.该项目,并且没有关于序列其余部分中的项目的任何信息.
我认为这可能是因为一些交叉引用错误.
我的问题是,有没有办法以这样的方式使用visual studio生成的DataSet,我可以在所有层中使用相同的DataSet(供重用),但将Table Adapter逻辑分离到数据访问层,以便前端是通过Web服务从这一切中抽象出来?
如果我有手写代码,我会放弃数据集生成器给出的好处,如果稍后添加了列,我需要手动添加它等,所以我想尽可能多地使用visual studio向导.
如果我是你,我会远离数据集。它们在很大程度上是该问题的 .NET 2.0 解决方案,但也不是一个很好的解决方案。
我会使用实体框架作为数据层 - 它们不存在数据集所存在的问题,包括您所看到的问题。数据集必须同时存在于两个世界中——XML 和关系,而且它们并不总是适合。实体框架可以构建只需要符合继承和关联等标准编程概念的实体模型。
通过 Web 服务传输时,实体框架的问题也较少。您应该使用 WCF 来完成所有新的 Web 服务工作(Microsoft 现在认为 ASMX Web 服务是“遗留技术”),但即使使用 ASMX Web 服务,EF 实体也会相当干净地传输。.NET 3.5 中存在一些相对较小的问题,但这些问题已在 .NET 4.0 中得到解决。
| 归档时间: |
|
| 查看次数: |
1620 次 |
| 最近记录: |