【发布时间】:2010-02-08 21:37:00
【问题描述】:
对于如何在 RIA 服务中的域服务中实现更复杂的操作,我有一些困难。这就是 Beta 2 中的 Silverlight 4、VS 2010 和 .Net Framework 4。
目标
我希望我可以在我的 LinqToEntitiesDomainService 上创建一个操作,该操作将具有如下签名:
public UnwieldyOperationResult PerformUnwieldyOperation( UnwieldyOperationParameters p );
这个想法是,此操作采用一组参数并执行相当复杂的操作,这些操作将更新通过 DomainService CRUD 功能操作的实体的不同实例和类型。
问题
我遇到的直接问题是似乎不允许将自定义类型作为参数传递给该方法,我想这些方面的一些东西用于返回值。为了清楚起见,我想将操作参数封装在 DTO 中,而这个笨重的操作在我用 Entity Framework 4.0 模型包装的遗留数据库中没有任何对应的实体,而我又将域服务基于它。
域服务是否应该只处理底层 EF 模型中的实体类型?它不是为了暴露更复杂的操作,比如我的 UnwieldyOperation 吗?
如果是这样,我是否可以以某种方式构建另一个服务,允许操作签名和操纵实体框架?
我知道只有一个域服务可以处理模型中的实体。这导致我将所有的 CRUD 和现在的 UnwieldyOperation 都塞进了一个域服务中,尽管我的第一个想法是将服务拆分为更小的部分。
如果我要让操作在域服务中使用参数和返回值,我的下一个愿望是让已经在客户端的域上下文中加载的实体刷新自己。
这样的事情有什么有效的机制吗?
你打算怎么做?
到目前为止我所拥有的......
简而言之,这就是我目前所拥有的:
我已经打包了一个现有的旧数据库 使用带有 as 的 Entity Framework 4.0 模型 一点额外的填充/代码为 可能的。这意味着右键单击,添加并从数据库生成。
我已经在 DomainService 中实现了更简单的 CRUD 操作,并且我成功地使用它们来显示和编辑直接数据。我通过客户端中的 ViewModels 对逻辑进行了一些封装,但我直接公开了实体类,但我认为这与我的问题/问题无关。
我已经意识到我不能像我最初想象的那样直接添加 UnwieldyOperation... 另外我怀疑/希望我误解了域服务机制的某些方面,这导致我现在的情况。
还有一条路要走?h2>
在这样的问题中写下来给了我一个想法,也许我会朝这个方向发展:
- LegacyModelService 公开 CRUD 操作,就像我已经完成的那样。
- 在另一个服务中公开 Unwieldy 操作。我应该将其设为 RIA Doamin Service 还是仅使用 WCF?
- 从新的 UnwieldyOperationsService 访问实体框架模型并在那里操作数据层。
- 在客户端显式重新加载或刷新 LegacyModelService 的客户端域上下文,以反映 UnwieldyOperation 可能导致的更改。什么是完成这项工作的好方法?
【问题讨论】:
标签: silverlight entity-framework wcf-ria-services operations