首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Silverlight + DomainService 简易框架之三完成一个数据(非聚合)查询操作

2012-10-16 
Silverlight + DomainService 简易框架之三完成一个数据(非集合)查询操作使用Silverlight + DomainService

Silverlight + DomainService 简易框架之三完成一个数据(非集合)查询操作

使用Silverlight + DomainService进行开发时我们可以在Silverlight项目中创建一个BLL层用于Silverlight调用如下图所示

Silverlight + DomainService 简易框架之三完成一个数据(非聚合)查询操作

要完成数据查询功能在Sliverlight项目中做了这么几项工作

1.定义查询处理委托

  public delegate void SelectOneHander<T>(T data);

2.编写BLL代码

我这里写了一个DB类用于处理DomainService对象,代码如

    public class DB    {        private static DomainService1 _db;        public static DomainService1 db        {            get            {                if (_db == null) _db = new DomainService1();                return _db;            }        }    }

单数查询功能,例如前面文章中的分页查询中的总记录条数就用此方式进行查询的,要完成这种只查询一条记录的需要对原有的DomainService进行扩充

修改原有的DomainServie改为局部类,将如下代码改为:

public lass DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>

修改为:

public partial class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>


另外创建一个DomainServiceEx的文件,编写DomainService1的扩展类如下:

    public partial class DomainService1     {        public IQueryable<Books> GetBooksByPage(int pageIndex,int pageSize)        {            return this.ObjectContext.Books.OrderBy(b=>b.Id).Skip(pageIndex * pageSize).Take(pageSize);        }        public int GetBookCount()        {            return this.ObjectContext.Books.OrderBy(b => b.Id).Count();        }    }

这样就可以在Silverlight的UserBLL中调用这两个数据方法:

    public class BookBLL    {        public static void FindAllByPage(int pageIndex,int pageSize,SelectHander<Books> sh)        {            var db=DB.db;           var m= db.Load<Books>(db.GetBooksByPageQuery(pageIndex,pageSize));           m.Completed += (a,b) => {               sh(m.Entities);           };        }        public static void GetBookCount(SelectOneHander<int> sh)        {            var db = DB.db;            var m = db.GetBookCount();            m.Completed += (a, b) => {                sh(m.Value);            };        }    }


3.在Silverlight的表示层就可以调用BookBLL来完成分页代码

        //加载时绑定数据        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)        {            //第一页数据            BookBLL.FindAllByPage(0, 10, datas => {                                booksDataGrid.ItemsSource = datas;                            });            //获取页码            BookBLL.GetBookCount(data => {                hahaPager1.Pi.RecordCount = data;                hahaPager1.Pi.PageSize = 10;                hahaPager1.Pi.Compute();                hahaPager1.Render();            });        }        //页码改变时重新获取下一页数据        private void hahaPager1_PageIndexChanged(object sender, EventArgs e)        {            var pi=hahaPager1.Pi;            BookBLL.FindAllByPage(pi.PageIndex, pi.PageSize, datas =>            {                booksDataGrid.ItemsSource = datas;            });        }


效果就和前面的文章一样了:

Silverlight + DomainService 简易框架之三完成一个数据(非聚合)查询操作

热点排行