将WCF服务与DataContracts VS实体框架实体对象一起使用的优缺点是什么?
如果我使用ADO.net自我跟踪实体生成器生成数据 Contract 我的数据层中的类 .
在我的WCF服务中使用它的最佳方法是什么? datacontract生成的ADO.net自我跟踪实体生成器是否将通过服务或WCF服务来实现仍将使用默认的Entity框架对象?
STE(自跟踪实体)的主要优点是变更集的实现 . 这意味着您可以从Web服务的操作修改实体(或整个实体图形)返回STE,并调用另一个操作将更新的STE发布回Web服务进行处理 . EF将自动检测STE的变化并处理它们 .
这对于Entity Framework实体是不可能的,因为它只能在实体附加到 ObjectContext 时跟踪更改,但是当从Web服务操作返回时实体被分离 .
ObjectContext
STE的缺点是您必须共享在服务和所有客户端之间定义它们的程序集 . STEs are not for interoperable解决方案 .
目前,大多数项目都是使用第三类实体开发的 - POCOs . 从 ObjectContext 分离时,POCO也无法跟踪更改 . 这是STE的特色 .
这取决于你正在做什么类型的工作 .
使用形成数据合约的DTO(数据传输对象)并与EF模型分开,可以让您更好地控制序列化的内容 . 这对于与多个客户端的兼容性和版本控制很重要 .
http://martinfowler.com/eaaCatalog/dataTransferObject.html
在控制和分离方面,使用EF和POCO很可能是最后生成的默认数据库 . 但是,当与Silverlight客户端一起使用时,这两个更易于使用且更灵活 .
2 回答
STE(自跟踪实体)的主要优点是变更集的实现 . 这意味着您可以从Web服务的操作修改实体(或整个实体图形)返回STE,并调用另一个操作将更新的STE发布回Web服务进行处理 . EF将自动检测STE的变化并处理它们 .
这对于Entity Framework实体是不可能的,因为它只能在实体附加到
ObjectContext
时跟踪更改,但是当从Web服务操作返回时实体被分离 .STE的缺点是您必须共享在服务和所有客户端之间定义它们的程序集 . STEs are not for interoperable解决方案 .
目前,大多数项目都是使用第三类实体开发的 - POCOs . 从
ObjectContext
分离时,POCO也无法跟踪更改 . 这是STE的特色 .这取决于你正在做什么类型的工作 .
使用形成数据合约的DTO(数据传输对象)并与EF模型分开,可以让您更好地控制序列化的内容 . 这对于与多个客户端的兼容性和版本控制很重要 .
http://martinfowler.com/eaaCatalog/dataTransferObject.html
在控制和分离方面,使用EF和POCO很可能是最后生成的默认数据库 . 但是,当与Silverlight客户端一起使用时,这两个更易于使用且更灵活 .