读书人

Silverlight + DomainService 简易框架

发布时间: 2012-10-16 09:57:37 作者: rapoo

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 简易框架之三完成一个数据(非聚合)查询操作

读书人网 >网络基础

热点推荐