Silverlight 中 DomainService的手动扩充
来源:互联网 发布:电力软件开发 编辑:程序博客网 时间:2024/04/28 03:09
对于Silverlight中添加DomainService的对话框只能选择一次,如果数据库表增加就没有办法进行操作,只能将原有的DomainService删除后重新添加,本教程就是帮你解决此问题,我们选看一下DomainService添加界面如下
界面中没有选择的实体是不能进行操作的,我们可以通过手动的方式将这些实体添加到DomainService中供Silverlight操作,这样我们就可以根据自己需要进行灵活操作。
先将生成的DomainService1类改为局部类
public partial class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>
然后自己创建一个 DomainService1的局部类,就可以进行手动添加操作
1.必须添加一个查询操作然后才能添加其它操作,如果不添加查询操作编译时就会出现如下错误:
错误 1 域方法“UpdateUserRoles”的参数“data”必须是 DomainService 公开的实体类型。该实体类型可以直接在查询操作中公开,也可以通过关联间接公开。
例如我们添加UserRoles的查询操作,代码如下:
public IQueryable<UserRoles> GetUserRoles() { return this.ObjectContext.UserRoles; }
然后就可以添加其它的查询方法,例如条件查询:
public IQueryable<UserRoles> GetUserRolesByName(string name) { return this.ObjectContext.UserRoles.Where(r=>r.Name.StartsWith(name); }
分页查询:(分页要先排序才可以)
public IQueryable<Books> GetBooksByPage(int pageIndex,int pageSize) { return this.ObjectContext.Books.OrderBy(b=>b.Id).Skip(pageIndex * pageSize).Take(pageSize); }
在Silverlight中调用请参考前面的文章
2.添加增加方法,代码如下:
public void InsertUserRoles(UserRoles data) { if ((data.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager.ChangeObjectState(data, EntityState.Added); } else { this.ObjectContext.UserRoles.AddObject(data); } }
3.添加更新操作,代码如下:
public void UpdateUserRoles(UserRoles data) { this.ObjectContext.UserRoles.AttachAsModified(data, this.ChangeSet.GetOriginal(data)); }
如果要添加自定义的更新方法就需要自己写一个方法,这个方法有如下要求:
a.方法返回值不要用void,这要不方便使用OptionHander调用(参照前面的文章)
例如更新代码如下:
public void UpdateUserRolesEx(UserRoles data) { var old = this.ObjectContext.UserRoles.Where(r => r.Id == data.Id).Single(); old.Name = data.Name; this.ObjectContext.UserRoles.AttachAsModified(old, this.ChangeSet.GetOriginal(old)); }
就会碰到这样的错误:
因此这个方法需要改成如下格式:
public bool UpdateUserRolesEx(UserRoles data) { try { var old = this.ObjectContext.UserRoles.Where(r => r.Id == data.Id).Single(); old.Name = data.Name; this.ObjectContext.UserRoles.AttachAsModified(old, this.ChangeSet.GetOriginal(old)); return true; } catch { return false; } }
Silverlight中UserRoleBLL调用代码如下:
public static void UpdateUserRolesEx(OptionHander oh,UserRoles role) { var m = DB.db.UpdateUserRolesEx(role); m.Completed += (a, b) => oh(m.Value); }
4.删除操作
public void DeleteUserRoles(UserRoles data) { if ((data.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager.ChangeObjectState(data, EntityState.Deleted); } else { this.ObjectContext.UserRoles.Attach(data); this.ObjectContext.UserRoles.DeleteObject(data); } }
扩展删除方法:
public bool DeleteUserRoleById(int id) { try { var old = this.ObjectContext.UserRoles.Where(r => r.Id == id).Single(); DeleteUserRoles(old); return true; } catch { return false; } }
调用参考前面的文章
- Silverlight 中 DomainService的手动扩充
- Silverlight中关于DomainService操作数据的分析
- silverlight 使用 DomainService 注意事项
- 手动扩充FreeTextBox的功能
- Silverlight 4+WCF RIA ServiceS商业应用 5---关联的DomainService和报表的展示
- Silverlight+DomainService在客户端获取时间问题
- Silverlight domainservice调用添加方法出错
- java中数组的扩充
- Silverlight + DomainService 简易框架之一 完成增删改操作
- Silverlight + DomainService 简易框架之二完成查询操作
- Silverlight + DomainService 简易框架之一 完成增删改操作
- 向Ria service 的 DomainService域服务中添加业务逻辑时的各种标签
- discuz 中扩充session的值
- 我的开源[不断扩充中]
- js中扩充类型的功能
- 如何扩充vmware中ubuntu的硬盘空间?
- 尝试手动增加sybase设备文件的内容来扩充设备大小
- 最近公共祖先---手动扩充占内存
- js模拟alert封装自定义提示框,1秒后自动消失
- UIResponder 对象详解
- 各种常见的排序算法及其实现
- android系统自带通讯录的深度研究
- SAP3.0相关问题,Could not load file or assembly 'sapnco, Version=3.0.0.42
- Silverlight 中 DomainService的手动扩充
- 终于有人说出来了——Java不适合于作为主要编程教学语言
- Request对象.Response对象.Server 对象
- The first module to linux
- 数据结构:胜者树与败者树
- 建立动态的n维数组
- 文件存储openFileOutput和openFileInput
- ParaView:Plugin Deployment with Development Installs
- Wayland 架构