SilverLight数据库访问示例

ZDNet软件频道 时间:2008-06-30 作者:苏鹏 | 中国IT实验室 我要评论(2)
本文关键词:Silverlight 数据库应用 数据库访问 Windows
在这里我们为了后面编辑数据库应用服务器,选择添加ASP.NET 2.0的网站,添加之后的工程窗体项目文件如下图1.3所示 定义接口之后,接口的实现相对简单,只需要在Service.cs文件中使用如下图1.20所示技巧,即可实现基本功能。 

  Silverlight 目前已经成为互联网应用当中的终点,其本身具有的巨大市场前景,尤其是提供丰富的网路表示控件方面已经成为了flash的最大竞争对手,几天我们通过一个简单的示例演示如何使用Silverlight创建一个使用数据访问的应用,同时为了配合微软最新的.NET 3.5技术,这个例子还将使用微软的LINQ数据源作为数据集合的基础,使用WCF进行远程的数据访问,从而实现分布式调用。

  整个过程共分为5个部分

  1.创建一个Silverlight应用

  2.创建一个使用LINQ的数据源映射对象

  3.创建一个WCF应用

  4.在Silverlight中添加对WCF的引用

  5.在Silverlight添加DataGrid数据显示控件

  1 创建一个Silverlight应用

  本程序使用Visual Studio 2008中创建新的Silverlight应用。在Visual Studio 2008中只要安装了Silverlight 2.0 Beta 1的Visual Studio 2008模板即可看到如下图1.1所示的新工程模板,

图1.1 新建Silverlight 2.0工程

  在新建Sl工程的时候有一个选项,就是是否添加Asp.NET的网站作为宿主如下图1.2所示

图1.2 选择是否添加Asp.net网站应用

  在这里我们为了后面编辑数据库应用服务器,选择添加ASP.NET 2.0的网站,添加之后的工程窗体项目文件如下图1.3所示

  1.3 添加工程以后的应用界面

  可以看到Sl被编译成为了一个SilverlightDemo.xap文件,这个文件到底是什么内容呢,我们在这里对它的内容进行解密,首先修改文件后缀为zip之后解压缩,就可以看到文件是把SL运行需要调用的程序打包之后随应用程序提供。图1.4显示了这几个文件

图1.4 SilverlightDemo.xap所包含的文件

  这些文件除了基本的SL库文件之外还有一个应用程序描述文件,AppMainfest.xaml,这个文件记录了当前应用程序所使用的基本业务逻辑和表示层内容。

  2 创建一个使用LINQ的数据库映射对象

  下一步就要建立一个数据库,这里首先建立一个数据库表结构,本例中我们建立的是一个微软的NorthWind数据库中的Custom表进行数据访问,该数据库从微软的官方网站就可以下载。http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

  数据库表结构如下图1.5所示

图1.5 Customers表结构

  下一步添加LINQ表引用数据库,首先添加LINQ实体对象如下图1.6所示:

图 1.6 显示添加了一个LINQ to sql对象

  添加之后就可以通过服务器浏览器找到数据库实体,并把它添加到LINQ实体当中,添加的方法很简单,只需要拖拽表即可。添加之后如图1.7所示

图1.7 添加Customer之后就可以这个表结构

  这里我们还要对数据库进行添加,所以需要对数据库添加进行验证,这一验证会影响我们后面的数据库更新操作,所以需要修改每一个字段的属性为UpdateCheck Never,如下图1.8所示

图1.8 修改字段更新方式

  3.添加WCF引用服务

  下一步即可添加一个WCF引用服务,这里的WCF服务添加是在工程中添加一个WCF Service,如下图1.9所示:

图1.9 WCFService添加效果图

  添加之后WCF Service文件会创建2文件IServic.cs和Service.cs文件,前者定义接口的契约描述,后者定义实际接口的内容,我们首先对前者进行编程,说明服务器契约内容。代码如下所示

  [OperationContract]

  List<customer> GetAllCustomer();

  [OperationContract]

  Product SaveCustomer (Customer customer);

  [OperationContract]

  void DeleteCustomer (Customer Customer);

  定义接口之后,接口的实现相对简单,只需要在Service.cs文件中使用如下图1.20所示技巧,即可实现基本功能

  图1.20 实现接口内容

  接口层实现的代码如下所示

  public List<Customer> GetAllCustomer()

  {

  DataClassesDataContext db = new DataClassesDataContext();

  var customer = from p in db.Customers

  select p;

  return customer.ToList<Customer>;

  }

  public Product SaveCustomert(Customer customer)

  {

  DataClassesDataContext db = new DataClassesDataContext();

  if (customer.CustomerID >0)

  {

  //表示该结果已经存在,所以要更新记录

  db.Customers.Attach(customer, true);

  }

  else

  {

  //表示结果不存在,这时候插入记录

  db.Customers.InsertOnSubmit(customer);

  }

  db.SubmitChanges();

  return customer;

  }

  public void DeleteCustomer(Customer customer)

  {

  DataClassesDataContext db = new DataClassesDataContext();

  db.Customers.Attach(customer, true);

  db.Customers.DeleteOnSubmit(customer);

  db.SubmitChanges();

  }

  这里还需要注意一个细节,因为WCF Service调用方式有很多,其中http方式是使用比较方便的,也是本例中要进行使用的,而默认建立的时候调用方式是wsHttpBinding,这里要通过修改Web.Config文件来实现修改绑定方式为BasicHttpBinding。

  <system.serviceModel>

  <behaviors>

  <serviceBehaviors>

  <behavior name="ServiceBehavior">

  <serviceMetadata httpGetEnabled="true" />

  <serviceDebug includeExceptionDetailInFaults="false" />

  </behavior>

  </serviceBehaviors>

  </behaviors>

  <services>

  <service behaviorConfiguration="ServiceBehavior" name="Service">

  <endpoint address="" binding="BasicHttpBinding" contract="IService">

  <identity>

  <dns value="localhost" />

  </identity>

  </endpoint>

  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

  </service>

  </services>

  </system.serviceModel>

  最后,还需要指定系统使用固定端口进行编译,以防止应用Silverlight无法访问到应用端口导致出错,如下图1.21所示

图1.21设置静态端口,这里使用的2041端口

  4. 在Silverlight中添加WCF引用

  首先在SL中添加对WCF Service的引用如下图1.22所示

图1.22 添加对WCF Service的引用

  添加之后如图1.23所示

图1.23 添加了Service引用的结果

  这里有个技巧,在添加的时候只需要选择Discovry方式就可找到当前工程中的wcf应用。

  6 在SL添加DataGrid显示数据

  在SL中通过toolbox可以找到用于显示数据的DataGrid,如图1.24所示

图1.24 DataGrid控件

  这里需要注意的是,不能把DataGrid直接拖拽到设计界面,而应该拖拽到代码界面来,拖拽之后在后置代码中指定其数据源为LINQ返回的数据实体即可。

  在页面的Load事件当中添加如下代码

  var client = new NorthwindServiceClient();

  client.GetProductsCompleted +=

  new EventHandler<GetProductsCompletedEventArgs>(client_GetProductsCompleted);

  client.GetProductsAsync(txtProductString.Text);

  然后在绑定函数中使用dataGridResults.ItemsSource = e.Result;即可实现绑定,这里需要注意的是dataGridResults是在前置代码中通过设置x:name来设置的DataGrid控件名称。

  至此一个使用Sl的三层架构应用就完成了。希望大家在动手实践过程中可以熟悉LINQ和WCF的一些基本设置和用法,并对SL的用法熟悉。

用户评论
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134