使用Silverlight + DomainService進行開發時我們可以在Silverlight項目中創建一個BLL層用於Silverlight調用如下圖所示
要完成數據查詢功能在Sliverlight項目中做了這麼幾項工作
1.定義查詢處理委託
public delegate void SelectHander<T>(IEnumerable<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;
}
}
}
2.1普通全查功能
public class RoleBLL
{
public static void FindAll(SelectHander<UserRoles> sh)
{
var db = DB.db;
var m = db.Load<UserRoles>(db.GetUserRolesQuery());
m.Completed += (a, b) =>
{
sh(m.Entities);
};
}
}
2.2如果要完成帶條件查詢需要在Web服務端進行處理
2.2.1 修改原來的
public class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>
改爲
public partial class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>
這樣自己就可以再寫一個局部類來擴充DomainService1的代碼
public partial class DomainService1
{
public IQueryable<UserRoles> GetUserRolesByName(string name)
{
return this.ObjectContext.UserRoles.Where(r => r.Name.StartsWith(name));
}
}
2.2.2這樣在Silverlight端的RoleBLL就可以調用服務端的查詢,Silverlight端代碼如下:
public class RoleBLL
{
public static void FindAll(SelectHander<UserRoles> sh)
{
var db = DB.db;
var m = db.Load<UserRoles>(db.GetUserRolesQuery());
m.Completed += (a, b) =>{sh(m.Entities);};
}
public static void FindAllByName(string name, SelectHander<UserRoles> sh)
{
var db = DB.db;
var m = db.Load<UserRoles>(db.GetUserRolesByNameQuery(name));
m.Completed += (a, b) => { sh(m.Entities); };
}
}
3.Silverlight表示層端調用
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
RoleBLL.FindAll(datas => { userRolesDataGrid.ItemsSource = datas; });
}
效果:
條件查詢代碼:
private void btnQuery_Click(object sender, RoutedEventArgs e)
{
RoleBLL.FindAllByName(txtName.Text, datas => { userRolesDataGrid.ItemsSource = datas; });
}
效果: