RIAServices:在客户端编辑实体而无意保存

时间:2011-05-05 17:44:38

标签: entity-framework wcf-ria-services

我经常发现自己需要在RIAServices中编辑客户端的实体,仅用于UI目的,绝对无意将更改保存回数据库。但是,如果我没有在我的域服务中启用该实体的编辑,一旦我尝试更改其中一个实体上的字段,RIAServices就会抛出错误,并说该实体上没有启用编辑。

但问题是我不想允许在数据库中实际编辑实体,我只是想在客户端上乱用它。我还没有找到一个解决问题的好方法,似乎唯一的选择就是继续进行实际编辑,只是从不调用SubmitChanges()(这是一个非常可怕的想法),或做一个foreach循环当我加载实体并创建每个实体的新实例并复制其所有属性(基本上克隆我加载的实体,以便我不使用RIAServices加载的那些),但这很难实用。

我正在寻找(如果它存在)是在我加载之后,以某种方式“分离”我的客户端实体列表,以便RIAServices停止监视它们,我可以随意编辑它们(我将失去将它们保存起来的能力,但这是好的,因为我无论如何都不需要或想要。有任何想法吗?这让我疯了。

2 个答案:

答案 0 :(得分:1)

您可以通过调用

轻松地从DomainContext分离整个实体列表
DomainContext.MyEntities.Clear();

在执行此操作之前,只需将实体复制到另一个列表中,以便以后可以访问它们。 (我建议将它们保存在ViewModel中。)

简而言之,就这样做:

  1. 通过RIA服务加载实体。
  2. 将加载的实体复制到ViewModel中的List<MyEntity>
  3. 致电DomainContext.MyEntities.Clear();
  4. 根据需要修改您的实体;它们不会在SubmitChanges()上发回服务器,因为它们不再保留在DomainContext

答案 1 :(得分:0)

SubmitChanges只会在您的域名服务上调用必要的插入,更新,删除方法,所以您只需要调用方法throw new NotImplementedException();或者只删除方法。对于正在调用的SubmitChanges,没有秘密的方法。