这是不好的做法(我这样做错了)?

时间:2011-06-20 14:27:15

标签: silverlight entity-framework mvvm ria

在Silverlight LOB应用程序中,我使用RIA服务(EF)请求的结果填充ItemsControl。在项目控件内部是一些自定义控件,其中一个我有一个按钮,我用它来删除实体。

要删除它,我将它附加到控件中的域上下文,然后将其删除。为了能够附加它我在收到数据时在我的视图模型中这样做:

        foreach(var app in Apps.ToList())
        {
            _context.Apps.Detach(app);
        }

这是一个黑客吗?因为它确实感觉像是一个。

1 个答案:

答案 0 :(得分:1)

模式的存在是为开发人员服务而不是相反。你已经确定了臭臭的代码。困扰你的东西。现在你必须做出两个选择。气味难以消除吗?你应该如何去除它。

一个建议。您不必将标准CRUD与RIA服务一起使用。您可以创建一个服务操作DeleteApp,它获取应用程序的ID并对数据库执行删除操作。这将避免在客户端侧执行分离等的需要。这是Transaction Script模式的一个例子,因为我described in my article虽然是一个非常基本的例子。不要忘记在执行此操作后重新加载客户端列表,以便您没有过时的数据。

在极端情况下,您可能希望查看命令查询分离。在这种情况下,您有两个独立的DomainServices,一个是Read Only,另一个是Write。这会迫使您更清楚地了解自己的行为,并更多地考虑您想要做的 WHAT ,而不是 HOW 来做这件事。