前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Silverlight RIA Service开发实战总结(一)

Silverlight RIA Service开发实战总结(一)

作者头像
阿新
发布2018-04-12 16:27:16
6870
发布2018-04-12 16:27:16
举报
文章被收录于专栏:c#开发者c#开发者

Silverlight RIA Service开发实战总结(一)

如何更新(新增实体)domainService和metadata class

第一次使用向导生成linq-to-sql data model或ado.net entity data model后创建domain service以及metadata class都有向导很方便的生成对应的代码,但在开发过程中难免会新增个表或字段的,虽然linq-to-sql,ado.net entity提供在设计视图同步更新数据结构,但domain service,metadata class却没有提供同步更新的方法,每次只能新增新的或覆盖以前的文件,而自己写代码势必会增加不少工作量和一些bug;

下面说一下我的解决方法:

第一次根据向导生成各自的类文件,然后修改domain service类和metadata类,类似代码如下

代码语言:javascript
复制
public partial class EMSDomainService : LinqToEntitiesDomainService<EQPEntities>
    { 
        …… 
}

然后将你自己扩展的方法写在另外一个同名的domainservice类,方便日后修改定位

第二次新增实体后可以再次通过向导生成一个新domainservice类和metadata类,生成完后同样将类名修改成一样加上 partial 关键字

如此不会影响你修改过的类文件,实现了很好扩展。

如何有效地调用带参数的方法

向导产生的domainservice类的查询方法不带参数,而实际情况肯定需要根据条件筛选数据,比如一下代码

Domain service 类的代码

代码语言:javascript
复制
代码
[Query(IsDefault = false, ResultLimit = 50)]
        public IQueryable<PRE_EMS3_EQU> GetPRE_EMS3_EQUByPrefix(string copemsNo, string tradeCode, string prefix)
        {
            if (this.isCode(prefix))
            {
                int no = System.Convert.ToInt32(prefix);
                var query = from item in this.ObjectContext.PRE_EMS3_EQU
                            where item.TRADE_CODE.Equals(tradeCode) &&
                            item.COP_EMS_NO.Equals(copemsNo) &&
                            (item.G_NO.Equals(no) || item.CODE_T_S.StartsWith(prefix))
                            select item;
                return query;
            }
            else
            {
                var query = from item in this.ObjectContext.PRE_EMS3_EQU
                            where item.TRADE_CODE.Equals(tradeCode) &&
                            item.COP_EMS_NO.Equals(copemsNo) &&
                            item.G_NAME.Contains(prefix)
                            select item;
                return query;
            }
        }

对应DomainContext类的代码,

说明:所有页面(xaml)调用DomainContext的方法都是异步调用,只有成功回调后才能得到结果

一般的调用方法如下

代码语言:javascript
复制
CodeListDomainContext  db = new CodeListDomainContext();
            this.codeListCollection = db.CodeListItems;
            db.Load(db.GetCodeListQuery());

以上代码在有些场合并不能用,因为执行完db.load方法后db.CodeListItems并没有得到结果,还不能马上用

下面是完成异步调用代码

代码语言:javascript
复制
代码
if (db2 == null)
            {
                db2 = new EMSDomainContext();
            }
            #region query callback
            /*
            db2.Load(db2.GetPRE_EMS3_ORG_IMGByPKQuery(this.TradeCode,this.CopEmsNo,this.CopImgNo),
                     loadOperation =>
                     {
                         loadOperation.Completed += (s, e) =>
                             {
                                 var e1= loadOperation.Entities;
                                 if (e1.Count() > 0)
                                 {
                                     Console.WriteLine(e1.First());
                                 }
                             };
                     }, null);
            */
            #endregion

            #region query.completed
            if (this.CopImgNo == this.CopImgNoComboBox.Text && !string.IsNullOrEmpty(this.Unit))
                return;
            var query = db2.Load(db2.GetPRE_EMS3_ORG_EXGByPKQuery(this.TradeCode, this.CopEmsNo, this.CopImgNo));
            query.Completed +=(s,e)=>
                {
                    PRE_EMS3_ORG_EXG item = null;
                    LoadOperation<PRE_EMS3_ORG_EXG> q = (LoadOperation<PRE_EMS3_ORG_EXG>)s;
                  if (q.Entities.Count() > 0)
                  {
                      item = q.Entities.First();
                  }
                  if (item != null)
                  {
                      this.CopImgNo = item.COP_G_NO;
                  }
                  else
                  {
                      this.CopImgNo = "";
                 }
                };
            #endregion

以上提供2种写法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Silverlight RIA Service开发实战总结(一)
    • 如何更新(新增实体)domainService和metadata class
      • 如何有效地调用带参数的方法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档