应该使用什么方法来创建要在WCF应用程序中使用的数据模型

时间:2012-07-30 14:43:17

标签: c# asp.net wcf dataset webforms

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

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

1 个答案:

答案 0 :(得分:1)

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

您的应用程序将使用您将从ADO.NET DataSet中水合的对象,或者您可以使用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;}
}

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

Repository and Data Mapper pattern

然后使用DataSet来保护对象,无论是来自SQL查询还是来自存储过程都没有区别。

<强>无论其

我建议您对Entity Framework 5RC或Entity Framework 4.1+ Code First进行一些研究。 ADO.NET不是最好的方法。关于如何在Code First中工作的堆栈中有大量数据,但如果是一个选项,我会给你一两个链接让你开始沿着这条路走。

How to query a complex result set from EntityFramework and display the result set in MVC.

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

来自WCF的响应本质上只是XML序列化对象,您应该始终考虑我注入到我的DTO中的其他问题,这些问题将不会存在于对您的服务的消费者的任何WCF响应中。