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

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

要完成数据查询功能在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;
            });
        }


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

有网友Sky_Dhx 需要列出我的工程文件目录结构如下:

你可能感兴趣的:(Silverlight + DomainService 简易框架之三完成一个数据(非集合)查询操作)