如何在RIA域服务中调用CRUD以外的操作?

时间:2010-02-08 21:37:01

标签: silverlight entity-framework wcf-ria-services operations

我在如何在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对逻辑进行了一些封装,但我直接暴露了Entity类,但我认为这与我的问题/问题无关。

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

还有一种方法吗?

在这样的问题中写下这个问题让我觉得我可能会走向这个方向:

  1. LegacyModelService正如我已经完成的那样公开CRUD操作。
  2. 将笨拙的操作暴露在另一项服务中。我应该将其作为RIA Doamin服务还是仅仅是简单的WCF?
  3. 从新的UnwieldyOperationsService访问Entity Framework模型并在那里操作数据层。
  4. 在客户端显式重新加载或刷新LegacyModelService的客户端域上下文,以反映可能由UnwieldyOperation产生的更改。完成这项工作的好方法是什么?

1 个答案:

答案 0 :(得分:1)

查看http://msdn.microsoft.com/en-us/library/ee707373%28VS.91%29.aspx除了简单CRUD之外的命名约定,可能会调用Invoke或Named Update操作吗?