2009-04-20 51 views
1

我有一个Web应用程序连接到WCF服务的业务逻辑。为了性能和互操作性的原因,我想使用简单的Dto来在WCF边界处传输数据。键入的数据集连同Dtos

但是,我必须使用类型化的数据集进行数据访问(ORM或任何其他选项由于政治原因而不可用)。

将Dto与类型数据集一起使用是一个好主意。有没有人这样做?有推荐的模式吗?最重要的是有没有一个库/工具/方法来从类型化的数据集中自动生成Dto?

回答

0

我建议使用类型化DataRow-s,DataTable-s。类型化的DataRow和Dto对象之间确实没有太大的区别。 性能明智,你必须测试,普通Dto-s将会有所帮助(我怀疑它)。 至于互操作性,类型化DataRow-s是普通类,所以它们可以像Dto对象一样互操作。

+0

好与使用数据行作为DTO是他们都没有标明DataContracts问题。它们甚至不是可序列化的。我们测试了Dtos和序列化数据集之间的差异,并且对性能有显着影响。 – Ender 2009-04-20 12:48:15

2

实体翻译模式浮现在脑海。 http://msdn.microsoft.com/en-us/library/cc304747.aspx
好吧,也许是它的一个变种。

我不得不最近做类似的事情,而且我刚刚创建了另一个“层”,它将存储在数据行/数据表等中的数据转换为数据合同对象。服务层可以将您的数据访问方法的结果作为参数调用这个新的图层方法。

这里有一个快速和肮脏的伪代码示例:

public class personTranslator 
{ 

    public static PersonDataContract TranslateToContract(Datarow personDataRow) 
    { 
     PersonDataContract resultPerson = new Person; 
     resultPerson.FirstName = personDataRow["FirstName"]; 
     resultPerson.LastName = personDataRow["LastName"]; 
     . 
     . 
     [etc.] 

     return resultPerson; 
    } 
} 

SERVICELAYER类

public PersonDataContract GetSpecificPerson([Parameters]) 
{ 
    [other setup/validation code...] 
    return PersonTranslator.TranslateToContract(PersonDataAccess.GetPersonRow([Parameters])); 
}