zoukankan      html  css  js  c++  java
  • Silverlight RIA Service开发实战总结(一)

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

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

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

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

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

    public partial class EMSDomainService : LinqToEntitiesDomainService<EQPEntities>
        { 

            …… 


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

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

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

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

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

    Domain service 类的代码

     

    代码
    [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的方法都是异步调用,只有成功回调后才能得到结果

    一般的调用方法如下

                

    CodeListDomainContext  db = new CodeListDomainContext();
                
    this.codeListCollection = db.CodeListItems;
                db.Load(db.GetCodeListQuery()); 

     

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

    下面是完成异步调用代码

     

    代码
    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种写法

     

  • 相关阅读:
    TI CC2541的整体目标
    TI CC2541的GPIO引脚设置.
    E2PROM与Flash的引脚图
    TI BLE CC2541的通讯协议.
    TI BLE CC2541的I2C主模式
    Charles如何抓取电脑上的请求的https数据包
    Charles如何抓取手机上的请求的https数据包
    谷歌浏览器chrome调试H5页面 如果添加cookie?
    Unity 好坑的Save Scene
    Unity 官网教程 -- Multiplayer Networking
  • 原文地址:https://www.cnblogs.com/neozhu/p/1759930.html
Copyright © 2011-2022 走看看