神仙?妖怪?谢谢!

Just do it...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

DomainContext
从客户端项目内部,我们不直接与域服务交互。相反,会对服务端中的每个域服务在客户端生成一个域上下文类。我们在域上下文类上调用对应于域服务上想使用的方法。这个生成的域上下文类派生于DomainContext类。


查询
域上下文中的查询方法通常与域服务中的查询方法有相同的名字,并有后缀Query。例如,一个域上下文中的 GetCustomersQuery方法生成于域服务中的GetCustomers方法。这个查询方法返回一个EntityQuery对象,我们可以在其他操作中应用这个对象。
域上下文中的所有查询方法都是异步执行的。为了执行这个查询,我们在Load方法中把EntityQuery对象作为参数传递。


修改数据
当域服务中包含更新、插入、删除实体的方法时,在域上下文中不会生成这些方法。反之,我们在与上下文中使用SubmitChanges方法,会调用域服务中的正确操作。直到我们调用SubmitChanges时,才会在数据源中进行更改。可以通过调用RejectChanges方法来取消更改。
DomainContext类还提供HasChanges和 EntityContainer属性来允许我们评估行将发生的更改。对Domain context的EntityContainer对象跟踪行将发生的更改。行将发生的更改不包括对域服务中的操作的调用,因为这些操作会在被调用时立即执行。当调用SubmitChanges时,所有的行将发生的更改都一起发到域服务。


定制方法
对域服务中的那些有公共访问修饰符而且没有标记着IgnoreOperationAttribute属性的自定义方法,域上下文都会包含这些方法。域上下文中的这些方法的名字与域服务中的方法名字一样。在客户端,我们调用一个方法,直到SubmitChanges被调用时,这个方法才会被实际执行。 EntityContainer会将所有对自定义方法的调用作为行将发生的更改来跟踪。当调用SubmitChanges时,方法是异步处理的。
在客户端项目中对实体也会生成同样的自定义方法,这些实体在自定义方法中做为参数传递。因此,可以通过一个域上下文的实例或实体的实例来调用定制的方法。如果打开生成的代码文件,会注意到域上下文中生成的方法只是简单的调用实体内的生成方法。在这两种情况下,我们还是需要调用Submitchanges方法来执行这些方法。
下面的示例演示如何调用一个名为ResetPassword的自定义方法,OnSubmitCompleted是我们想实施处理数据操作结果的回调函数。

1 selectedCustomer.ResetPassword();   
2 customerContext.SubmitChanges(OnSubmitCompleted, null);  

 

 

Invoke Operations 调用操作
对域服务上的每个服务操作,域上下文都包含一个方法。与域操作不同,服务操作都会立即执行。不用调用SubmitChanges方法,服务操作会异步执行。服务操作返回一个InvokeOperation对象。我们检索Value属性的值来得到从服务操作中返回的结果。
下面的示例演示了如果调用一个名为GetLocalTemperature的服务操作。

代码
 1 InvokeOperation<int> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode, OnInvokeCompleted, null);   
 2 private void OnInvokeCompleted(InvokeOperation<int> invOp)   
 3 {   
 4   if (invOp.HasError)   
 5   {   
 6     MessageBox.Show(string.Format("Method Failed: {0}", invOp.Error.Message));   
 7     invOp.MarkErrorAsHandled();   
 8   }   
 9   else  
10   {   
11     result = invokeOp.Value;   
12   }   
13 }

 


处理错误
当我们检索或修改数据时,我们必须决定如果处理在这些操作中可能出现的错误。当我们在域上下文上调用检索或修改数据的方法时,我们包含了指定处理错误的步骤的参数。当装载数据时,我们可以指定忽略错误。但在修改数据时,我们必须处理返回的异常。更多详情,请看 Silverlight 客户端 5.

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2010/04/08/5461678.aspx

posted on 2010-06-05 01:48  E.Trock  阅读(869)  评论(0编辑  收藏  举报