silverlight学习之路(1)创建 RIA Services 解决方案

学习过程真的很悲剧啊!唉!这点东西折腾了我好几天。不过,最终还算不错,弄出来了,继续努力。

开发工具:VS2012+silverlight5。

第一步:通过依次选择“文件”“新建”“项目”,在 Visual Studio 2010 中创建新的 RIA Services  项目。此时将出现“新建项目”对话框。如下图:

第二部:单击“确定”。此时将出现“新建 Silverlight 应用程序”对话框。

单击“确定”创建解决方案。该解决方案包含两个项目:一个客户端项目和一个服务器项目。客户端项目名为 SL,它包含用于创建表示层的 Silverlight 代码。服务器项目名为 SL.Web,它包含中间层代码。

(1)、如果不启用wcf RIA 服务,选中客户端项目SL,点击资源管理器 工具栏选项中的显示所有文件按钮,结果如下:

右键客户端项目SL,选择属性,结果如下:

(2)、如果启用wcf RIA 服务,在服务器端项目SL.Web添加ASP.NET实体数据模型后,生成解决方案,选中客户端项目SL,点击资源管理器 工具栏选项中的显示所有文件按钮,结果如下:

 

右键客户端项目SL,选择属性,结果如下:

 

本例选择启用WCF RIA 服务。

第三部:添加ASP.NET实体数据模型。

(1)、选中服务器端项目SL.Web,右键添加-->新建项,如下图:

这里更名:GoodsContract.edmx。

(2)、单击添加按钮。如下图:

(3)、单击下一步按钮,如下图:

 点击新建连接(C)... ,如下图:

 数据源选择“Microsoft SQL Server” ,点击 继续,选择数据库服务器(这里是本地),选择要使用的数据库,测试连接,如下图:

单击确定按钮,如下图:

注:如果在添加ASP.NEt实体数据模型前,在服务器资源管理器中添加了所需要的数据库,那么第三部的(3)中图将是上面的这张有涂鸦的图。

单击下一步,如下图:

选择所需的表,点击完成,如下图:

如果你现在点击*.Designer.cs文件,如下图:

这里是没有自动生成的代码的。这里我们需要设置一下,打开*.edmx 文件,单击空白处,查看属性,如下图:

修改属性窗口中的“代码生成策略”选项,改为“默认值”。我们再次查看*.Designer.cs文件,如下如图:

此时自动生成的代码默认是有问题的,这个问题我们下面再说(删除两个*.tt文件,就可以解决了)。

第四部:添加域服务类。

如果上一部最后的问题没有解决,这时候添加域服务类是有问题的,如下图:

此时没有可选的可选的上下文类,同时也没有实体。怎么解决?这里和上面自动生成的代码有问题是一个原因导致的,删除两个*.tt文件,就可以了。

如果这样是不可以,那么你就编译一下项目,就可以。如下图:

这里域服务类命名为DomainService_GoodsContract,  选择唯一的实体并启用编辑,点击确定按钮,如下图:

默认会生成四个方法,分别是:查询、插入、更新和删除。“Ctrl+shift+B”生成解决方案,客户端项目SL会有变化,如下图:

第五部:打开MainPage.xaml文件,拖入一个DataGrid控件,如下图:

最后,添加后台代码。按“F7”跳到代码页,添加using SL.Web;还有一个:using System.ServiceModel.DomainServices.Client;这两个引用,如下图:

 

终于完工了。启动调试,如下图:

 

唉! 写到这里我真的很郁闷,开始我自己做的时候,后台代码:

<p>public partial class MainPage : UserControl
    {
        private DomainService_GoodsContract client = new DomainService_GoodsContract();
        public MainPage()
        {
            InitializeComponent();</p><p>            LoadOperation<GoodsContract> loadOp = client.Load(client.GetGoodsContractQuery());
            DataGrid1.ItemsSource = loadOp.Entities;
        }
    }</p>

像这样写根本出不来结果,我都快崩溃了,强烈怀疑官方的演练。最后我是这样写的,就成功了:

public partial class MainPage : UserControl
    {
        private DomainService_GoodsContract client = new DomainService_GoodsContract();
        public MainPage()
        {
            InitializeComponent();
            Get();
        }
        void Get() 
        {
            LoadOperation<GoodsContract> loadOp = client.Load(client.GetGoodsContractQuery());
            DataGrid1.ItemsSource = loadOp.Entities;
        }
    }

我是真的没有明白这两种写法之间有何不同!如果有大神明白,还请赐教,不胜感激。

还有一种方式也成功了,DataGrid控件添加Loaded事件,代码如下:

<Grid x:Name="LayoutRoot" Background="White">
        <sdk:DataGrid x:Name="DataGrid1" Loaded="DataGrid1_Loaded_1" />
    </Grid>

后台代码:

<p>public partial class MainPage : UserControl
    {
        private DomainService_GoodsContract client = new DomainService_GoodsContract();
        public MainPage()
        {
            InitializeComponent();
            LoadOperation<GoodsContract> loadOp = client.Load(client.GetGoodsContractQuery());
            DataGrid1.ItemsSource = loadOp.Entities;
        }</p><p>        private void DataGrid1_Loaded_1(object sender, RoutedEventArgs e)
        {</p><p>        }       
    }</p>

现在这三种方式都成功了!我晕了!如果有明白的请指点一二,谢谢。

 

 


 

 

 

 


 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值