
Silverlight 2支持JsON、Web Service、WCF以及Sockets等新特性对数据CRUD *** 作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD *** 作方面的实战能力。
这篇文章介绍如何在Silverlight 2 beta 1中使用liNQ to sql进行数据CRUD *** 作。我把这个实例大致分为3层。
这里多说几句:微软发布的是Silverlight 2 beta1 并不是Silverlight 2.0,也不是Silverlight 2.0的Beta 1,但是现在很多Blog、新闻把Silverlight 2 beta1 错误的理解成了Silverlight 2.0或者Silverlight 2.0 Beta 1,在这里特地说明一下,真正的是Silverlight 2 beta1 并不是Silverlight 2.0,也不是Silverlight 2.0的Beta 1!希望初学者不要误解这个“概念”了。
软件需求 Silverlight 2 (beta1) Visual Studio 2008 sql 2005 Express with Management Studio 数据库实现这一篇,我们设计一个科技成果表。包含以下字段:成果编号,名称,类型,完成时间,成果截图,负责人,成果授予单位。为了演示,数据类型我没有具体定义了。如下所示:
Data Access层实现
目前在数据访问层有很多技术可以使用,像NHibernate、NetTIErs 、liNQ to sql、Entity Framework、Astoria (ADO.NET Data Services) 。VS2008为我们提供了OR设计器(liNQ to sql技术)可视化的编辑环境,来映射数据表。首先在Visual Studio 2008创建Silverlight工程然后添加liNQ to sql。下面一步一步讲解一下:
第一步:新建一个Silverlight工程,我命名为:YJingLee.Academe。并选择ASP.NET Web Site用来托管Silverlight应用程序。
第二步:在Web项目中添加liNQ to sql。
这一步,VS会提示你,新建一个App_Code目录,把Academe.dbml文件放到这个文件夹下面
第三步:映射表。我们把数据库表拖到OR设计器中,
第三步:定义数据契约。这是只需要在OR设计器修改Serialization属性为UnIDirectional。
另外,为了实现更新 *** 作方法,我们在这里修改每个字段的属性为UpdateCheck=UpdateCheck.Never。这时在cs文件中,设计器自动生成了一些代码。为了说明问题在这里我贴出相关不完整的代码。
[table(name="dbo.Product")][DataContract()]public partial class Product :INotifyPropertyChanging,INotifyPropertyChanged{ public Product() { this.Initialize(); } [Column(Storage="_ProductID",autoSync=autoSync.OnInsert,DbType="Int NOT NulL IDENTITY",IsPrimaryKey=true,IsDbGenerated=true,UpdateCheck=UpdateCheck.Never)] [DataMember(Order=1)] public int ProductID{ } ["_Productname",21)">"VarChar(100)",175)">DataMember(Order=2)] public string Productname{ } ["_ProductType",175)">DataMember(Order=3)] public string ProductType{ } ["_CompleteTime",175)">DataMember(Order=4)] public string CompleteTime{ } ["_Productimage",21)">"VarChar(300)",175)">DataMember(Order=5)] public string Productimage{ } ["_Principal",175)">DataMember(Order=6)] public string Principal{ } ["_AwardUnit",175)">DataMember(Order=7)] public string AwardUnit{ } private voID Initialize() { OnCreated(); } [OnDeserializing()] [System.ComponentModel. EditorbrowsableAttribute(EditorbrowsableState.Never)] public voID OnDeserializing(StreamingContext context) { this.Initialize(); }}
这里,我们可以看到,VS自动为表(这里映射为类)添加了DataContract属性,为序列化的成员添加了DataMember特性,同时设置了DataMember特性的Order属性为WCF提供序列化的顺序。另外,增加了一个序列化OnDeserializing事件,这个事件在反序列化之前发生,用于初始化类成员。
Web Service层实现服务层就是在Silverlight客户端与Web服务端提供一个通道,官方推荐使用WCF来读取,当然ASMX也可以。我想不久将来微软可能专门为Silverlight设计一个Silverlight-Enabled WCF Service,不过现在使用WCF Service也可以访问,使用这个的时候一定要注意在web.config文件中把wshttpBinding改为basichttpBinding。
第一步:添加WCF服务
第二步:定义服务契约。我们为WCF Service提供的增删查改方法定义服务契约。
ServiceContract]public interface IAcademeService{ [OperationContract] List<Product> GetAllProducts(); [Product SaveProduct(Product product); [OperationContract] voID DeleteProduct(Product product);}
第三步:实现服务:为增删查改方法具体实现。
在这里,提供一个小技巧,在IAcademeService下点击小箭头,选择实现接口,VS自动为我们生成了上面定义的没有实现的方法。
接着我们完成这些方法:其中SaveProduct方法用于更新和插入数据,这里使用了liNQ to SQL语句。
public class AcademeService : IAcademeService{ public Product> GetAllProducts() { AcademeDataContext db = new AcademeDataContext(); var products = from p in db.Products select p; return products.ToList<Product>(); } public Product product) { AcademeDataContext(); if (product.ProductID > 0) { //更新记录 db.Products.Attach(product,true); } else { //插入记录 db.Products.InsertOnsubmit(product); } db.submitChanges(); return product; } public voID DeleteProduct(AcademeDataContext(); db.Products.Attach(product,true); db.Products.DeleteOnsubmit(product); db.submitChanges(); }}
第四步:配置web.cofig文件。只需要把wshttpBinding改为basichttpBinding
<serviceBehaviors> <behavior name="AcademeServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDeBUG includeExceptionDetailinFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="AcademeServiceBehavior" name="AcademeService"> <endpoint address="" binding="basichttpBinding" contract="IAcademeService"> <IDentity> <dns value="localhost"/> </IDentity> </endpoint> <endpoint address="mex" binding="mexhttpBinding" contract="IMetadataExchange"/> </service> </services></system.serviceModel>
第五步:设置Web应用程序的端口号。把器端口号设置为固定端口52600,在浏览器中查看服务是否正常。
到此,编译一下Web项目,我们已经完成了所有的事情了,下一步就是在Silverlight中调用这个服务了。
总结以上是内存溢出为你收集整理的Silverlight 2 (beta1)数据 *** 作(5)——使用LINQ to SQL进行数据CRUD *** 作(上)全部内容,希望文章能够帮你解决Silverlight 2 (beta1)数据 *** 作(5)——使用LINQ to SQL进行数据CRUD *** 作(上)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)