原文地址:http://www.cnblogs.com/Realh/archive/2011/06/30/2094019.html
WCF RIA是一项很有意思的技术,能够让客户端的Silverlight直接访问服务端的数据库,而不需要创建新的WCF项目(当然,其底层还是通过WCF实现的),就像操作本地的数据库一样。
不过,WCF RIA只能用于Silverlight。相关安装包在Silverlight 4.0中包含。
我选择创建的是Silverlight Businuss,参考的是这个视频:.NET RIA Services Intro
1. 创建Silverlight Businuss Application
我创建的项目名称是DataManageSystem。创建成功后,在解决方案目录下,会生成DataManageSystem和DataManageSystem.Web两个项目。
在这里,推荐使用火狐浏览器进行调试。Chrome没法禁止缓存,常常每次修改完运行调试,运行的还是老版本的代码。IE8么,实在是卡,动不动就假死,只好算了。
2. 添加数据库访问层
这里我选的Entity Framework 4.1。因为数据库已经建了表了,所以选择Database First方式,在DataManageSystem.Web项目中添加新项目,选择ADO.Net 实体数据模型。我对表名全部使用了复数形式,所以勾选“确定所生成的对象名称的单复数形式”,这样能够映射得到单数形式的类名。
完了记得生成一下项目,这一步非常重要!
3. 添加Service
在DataManageSystem.Web项目中添加新项目,选择Domain Service Class。勾选对应的实体,是否启用编辑就随意了。
上一步如果没有生成项目的话,这边的实体类是不会显示的!
4. 在客户端添加新的视图
在客户端的View当中添加Silverlight页"DataSourceList.xaml"。
添加"System.Windows.Controls.Data"的引用,是这个Dll提供了DataGrid控件。
编辑Xaml,添加命名空间:
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
添加控件DataGridView(记得加data前缀)。
<data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False" IsReadOnly="True">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="数据源类别"
Binding="{Binding 数据源类别}" />
<data:DataGridTextColumn Header="数据源版本"
Binding="{Binding 数据源版本}" />
<data:DataGridTextColumn Header="摘要"
Binding="{Binding 摘要}" />
<data:DataGridTextColumn Header="测图比例尺"
Binding="{Binding 测图比例尺}" />
<data:DataGridTextColumn Header="保密级别"
Binding="{Binding 保密级别}" />
</data:DataGrid.Columns>
</data:DataGrid>
转到后台代码,添加命名空间"DataManageSystem.Web",在页面Loaded事件中添加数据绑定的代码:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var context = new DataSourceContext();
dataGrid.ItemsSource = context.DataSources;
context.Load( context.GetDataSourcesQuery() );
}
转到MainPage中,依样画葫芦,再加一个HyperlikeButton。其中NavigateUri改为"/DataSourceList", Content改为"数据页面"。
最后生成以下,启动调试: