c# - 关于如何在 .NET 的 N 层应用程序中使用强类型数据集的问题

标签 c# .net visual-studio ado.net strongly-typed-dataset

我需要一些有关 Visual Studio 生成的 ADO.NET 中强类型数据集的专家建议。这是详细信息。提前谢谢你。

  • 我想编写一个 N 层应用程序,其中表示层采用 C#/windows 形式,业务层是 Web 服务,数据访问层是 SQL 数据库。

  • 因此,我为此使用了 Visual Studio 2005,并在一个解决方案中创建了 3 个项目。

  • 项目 1 是数据访问层。在这里,我使用 visual studio 数据集生成器创建了一个强类型数据集和表适配器(为了测试我在罗斯文的客户表上创建了它)。数据集名为 NorthWindDataSet,其中的表为 CustomersTable。

  • 项目 2 的 Web 服务仅公开 1 个方法,即 GetCustomersDataSet。这使用 project1 库的表适配器来填充数据集并将其返回给调用者。为了能够使用 NorthWindDataSet 和表适配器,我添加了对项目 1 的引用。

  • 项目 3 是一个 win 表单应用程序,它使用网络服务作为引用并调用该服务来获取数据集。

在构建此应用程序的过程中,在 PL 中,我在项目 1 中添加了对上面生成的 DataSet 的引用,在表单的加载中,我调用了 Web 服务并将从 Web 服务接收到的 DataSet 分配给此数据集。但是我得到了错误:

Cannot implicitly convert type 'PL.WebServiceLayerReference.NorthwindDataSet' to 'BL.NorthwindDataSet' e:\My Documents\Visual Studio 2008\Projects\DataSetWebServiceExample\PL\Form1.cs

这两个数据集是相同的,但是因为我从不同的位置添加了引用,我认为我得到了上述错误。

所以,我所做的是将对项目 1(定义数据集)的引用添加到项目 3(UI),并使用 Web 服务获取数据集并分配给正确的类型,现在当项目3(具有 Web 表单)运行时,出现以下运行时异常。

System.InvalidOperationException: There is an error in XML document (1, 5058). ---> System.Xml.Schema.XmlSchemaException: Multiple definition of element 'http://tempuri.org/NorthwindDataSet.xsd:Customers' causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence.

我认为这可能是因为一些交叉引用错误。

我的问题是,有没有一种方法可以使用 visual studio 生成的数据集,使我可以在所有层中使用相同的数据集(以便重用),但将表适配器逻辑分离到数据访问层,以便前端是由 Web 服务从所有这些中抽象出来的?

如果我手写代码,我会失去数据集生成器提供的优点,而且如果以后添加了列,我需要手动添加等等,所以我想尽可能多地使用 Visual Studio 向导。

最佳答案

如果我是你,我会远离数据集。它们在很大程度上是解决问题的 .NET 2.0 解决方案,但也不是很好的解决方案。

我会使用 Entity Framework 作为数据层 - 它们没有 DataSet 所具有的问题,包括您所看到的问题。 DataSet 必须存在于两个世界中——XML 和关系,它们并不总是适合。 Entity Framework 可以为您构建只需要符合继承和关联等标准编程概念的实体模型。

Entity Framework 在通过网络服务传输时也有较少的问题。您应该将 WCF 用于所有新的 Web 服务工作(Microsoft 现在将 ASMX Web 服务视为“遗留技术”),但即使使用 ASMX Web 服务,EF 实体也将相当干净地传输。 .NET 3.5 中存在一些相对较小的问题,但这些问题在 .NET 4.0 中得到了解决。

关于c# - 关于如何在 .NET 的 N 层应用程序中使用强类型数据集的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576597/

相关文章:

c# - 如何从另一个线程更新 GUI?

c# - 关于从 ASP.NET 2.0 到 ASP.NET 3.5 MVC 的区别的问题

c# - 尽管指定了 .Returns,最小起订量对象仍返回 null

c++ - 为什么在 Visual Studio 中某些头文件需要链接库?

c# - 如何将类型与另一个程序集中的工厂例程配对?

Twitter API 的 C# DateTime created_at 字段

c# - App.conf 自定义配置集合 - 无法识别的属性

.net - 如何使用 msbuild 复制任务指定文件夹结构

c++ - 将 QMainWindow 中的 enterPressed() 连接到 Button clicked()

sql-server - 如何在 Ubuntu 中安装 Visual Studio 2008 和 MS SQL Server 2008?