在Silverlight LOB应用程序中,我使用RIA服务(EF)请求的结果填充ItemsControl。在项目控件内部是一些自定义控件,其中一个我有一个按钮,我用它来删除实体。
要删除它,我将它附加到控件中的域上下文,然后将其删除。为了能够附加它我在收到数据时在我的视图模型中这样做:
foreach(var app in Apps.ToList())
{
_context.Apps.Detach(app);
}
这是一个黑客吗?因为它确实感觉像是一个。
答案 0 :(得分:1)
模式的存在是为开发人员服务而不是相反。你已经确定了臭臭的代码。困扰你的东西。现在你必须做出两个选择。气味难以消除吗?你应该如何去除它。
一个建议。您不必将标准CRUD与RIA服务一起使用。您可以创建一个服务操作DeleteApp,它获取应用程序的ID并对数据库执行删除操作。这将避免在客户端侧执行分离等的需要。这是Transaction Script模式的一个例子,因为我described in my article虽然是一个非常基本的例子。不要忘记在执行此操作后重新加载客户端列表,以便您没有过时的数据。
在极端情况下,您可能希望查看命令查询分离。在这种情况下,您有两个独立的DomainServices,一个是Read Only,另一个是Write。这会迫使您更清楚地了解自己的行为,并更多地考虑您想要做的 WHAT ,而不是 HOW 来做这件事。