-1

我需要创建一个 WCF 服务应用程序,它将使用我的类库中的对象。这些对象需要从我的 WCF 应用程序中提供,并从 ASP.NET 中构建的 Web 应用程序中使用。

我必须使用数据集,但不确定我应该如何构建这个应用程序以及我应该以什么顺序构建所需的不同类。我应该先创建数据库模型然后构建数据集对象,还是应该先构建我的对象然后从我创建的对象集中创建我的数据模型。我还必须在这个应用程序中使用存储过程,所以我必须能够在我将使用的任何设计方法中支持它们。

4

1 回答 1

1

首先,我认为您需要准确定义要使用的技术。您一直说 DataSet,我假设您被迫使用经典的 ADO.NET 数据库编程。如果是这种情况,那么构建对象的顺序并不重要。

您的应用程序将利用您将从 ADO.NET 数据集中水合的对象,或者您可以使用 的新功能Load<Type>()来返回水合对象。您将首先构建您想要返回的对象,这些对象应该独立于数据库考虑因素。(何时何地构建数据库模型并不重要,您可以现在或稍后进行......持久性问题不应干扰对象建模和业务逻辑)

例子:

public class Book
{
     public string Title {get;set;}
     public DateTime PublicationDate {get;set;}
     public decimal Cost {get;set;}
     public virtual Author {get;set;}
}

public class Author
{
     public string Name {get;set;}
     public DateTime DateOfBirth {get;set;}
}

接下来,您将构建您的存储库以返回对象并定义您的查询。而不是再次输入这个,我会给你几个链接来阅读。

存储库和数据映射器模式

然后,您可以使用 DataSet 对对象进行水合,无论是来自 SQL 查询还是来自存储过程,都没有区别。

然而

我建议您对 Entity Framework 5RC 或 Entity Framework 4.1+ Code First 进行一些研究来执行此操作。ADO.NET 不是这样做的最佳方式。堆栈上有大量关于如何在 Code First 中工作的数据,但如果可以的话,我会给你一两个链接,让你开始走这条路。

如何从 EntityFramework 查询复杂的结果集并在 MVC 中显示结果集。

我忘了提到 你不能也不应该从 WCF 返回实时数据集。有一些技巧可以让你这样做,但我强烈建议你不要这样做,原因有很多。WCF 应该返回一个完全独立于持久性问题并包含没有逻辑的纯数据的 DTO(数据传输对象)。然后,这可以序列化和反序列化,而不用担心有人拥有对象 DTO 并被迫在 .NET 环境下操作。WCF 服务应该能够被任何支持 SOAP 的语言使用并反序列化为该语言中的对象。

来自 WCF 的响应本质上只是 XML 序列化对象,您应该始终考虑我在 DTO 中注入的额外关注点,这些关注点在任何 WCF 对您的服务使用者的响应中都不存在。

于 2012-07-30T15:15:41.663 回答