1

我在了解如何在 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 都塞进了一个域服务中,尽管我的第一个想法是将服务拆分为更小的部分。

如果我要让操作在域服务中使用参数和返回值,我的下一个愿望是让已经在客户端的域上下文中加载的实体刷新自己。

这种事情有什么有效的机制吗?

你打算怎么做呢?

我目前所拥有的...

简而言之,这就是我到目前为止所拥有的:

  • 我已经使用 Entity Framework 4.0 模型包装了一个现有的遗留数据库,并尽可能少地使用额外的填充/代码。这意味着右键单击,添加并从数据库生成。

  • 我已经在 DomainService 中实现了更简单的 CRUD 操作,并且我成功地使用它们来显示和编辑直接数据。我通过客户端中的 ViewModels 对逻辑进行了一些封装,但我直接公开了实体类,但我认为这与我的问题/问题无关。

  • 我已经意识到我不能像我最初想象的那样直接添加 UnwieldyOperation ......另外我怀疑/希望我误解了域服务机制的某些方面,这导致了我目前的情况。

一种方法?

在这样的问题中写下来给了我一个想法,也许我会朝这个方向发展:

  1. LegacyModelService 像我已经完成的那样公开 CRUD 操作。
  2. 在另一个服务中公开 Unwieldy 操作。我应该将其设为 RIA Doamin 服务还是只是普通的 WCF?
  3. 从新的 UnwieldyOperationsService 访问实体框架模型并在那里操作数据层。
  4. 在客户端显式地重新加载或刷新 LegacyModelService 的客户端域上下文,以反映 UnwieldyOperation 可能导致的更改。什么是完成这项工作的好方法?
4

1 回答 1

1

查看http://msdn.microsoft.com/en-us/library/ee707373%28VS.91%29.aspx以了解简单 CRUD 之上的命名约定,也许调用或命名更新操作会合适?

于 2010-02-15T22:34:05.500 回答