Silverlight RIA学习笔记一
时间:2011-04-22 来源:浪花一朵朵
一,向中间代码添加业务逻辑
在RIA service中通常会涉及到一些业务逻辑不需要客户端调用,但中间层又不可或缺,也就是只在中间层中访问,客户端不需要访问,不需要将该方法公开为服务,使用 IgnoreAttribute 特性来标记该方法,这个在客户端不可见,下面的演示将添加一个新的应用,(如果应用名称不重复)该方法使用 IgnoreAttribute 特性进行了标记,以防止从客户端将该方法作为服务调用。
/// <summary>/// 判断是否存在相同的应用名称
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[Ignore]
public bool isExist(string name)
{
var temp = this.ObjectContext.BSMG_T_Content.Where(c => c.Name == name).OrderByDescending(c => c.ID).FirstOrDefault();
return temp == null ? false : true;
}
/// <summary>
/// 添加应用
/// </summary>
/// <param name="bSMG_T_Content"></param>
public void InsertBSMG_T_Content(BSMG_T_Content bSMG_T_Content)
{
if (!this.isExist(bSMG_T_Content.Name))//调用isExist()方法
{
if ((bSMG_T_Content.EntityState != EntityState.Detached))
{
this.ObjectContext.ObjectStateManager.ChangeObjectState(bSMG_T_Content, EntityState.Added);
}
else
{
this.ObjectContext.BSMG_T_Content.AddObject(bSMG_T_Content);
}
}
}
二添加命名更新方法
在域服务类中,添加与命名更新方法的预期签名匹配的方法。
该方法应使用 UpdateAttribute 特性标记(同时 UsingCustomMethod 属性设置为 true),或是不返回任何值,而是接受某个实体作为第一个参数。
下面的示例演示一个方法,该方法允许具有更新当前应用中各个属性,
/// <summary>
/// 更新当前应用
/// </summary>
/// <param name="current"></param>
public void SetContentType(BSMG_T_Content current)
{
if (current.EntityState==EntityState.Detached)
{
this.ObjectContext.BSMG_T_Content.Attach(current);
}
}
在客户端调用的时候,可直接调用,然后提交
客户端调用可作如下调用:
bSMG_T_Content.SetContentType();
_rAPAdminAppMgmtDomainContext.SubmitChanges(onSubmitCallback, null); 三:添加调用操作 服务方法如下: [Invoke] public IEnumerable GetName() { return new[] { "Tom", "Mary", "Green" }.Select(i => i.ToString()); }
InvokeOperation invokeOp = customerContext.GetName(OnInvokeCompleted, null); private void OnInvokeCompleted(InvokeOperation invOp) { if (invOp.HasError) { MessageBox.Show(string.Format("Method Failed: {0}", invOp.Error.Message)); invOp.MarkErrorAsHandled(); } else { result = invOp.Value; } } 未完....待续