silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

导言 Silverlight 2支持JSON、Web service、WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD操作方面的实战能力。 这篇文章介绍如何在Silverlight 2 beta 1中使用LINQ to SQL进行数据CRUD操作。我把这个实例大致分为3层。 这里多

导言

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)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

这里多说几句:微软发布的是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

数据库实现

这一篇,我们设计一个科技成果表。包含以下字段:成果编号,名称,类型,完成时间,成果截图,负责人,成果授予单位。为了演示,数据类型我没有具体定义了。如下所示:

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

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应用程序。

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

第二步:在Web项目中添加LINQ to sql

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

这一步,VS会提示你,新建一个App_Code目录,把Academe.dbml文件放到这个文件夹下面

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

第三步:映射表。我们把数据库表拖到OR设计器中,

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

第三步:定义数据契约。这是只需要在OR设计器修改serialization属性为Unidirectional。

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

另外,为了实现更新操作方法,我们在这里修改每个字段的属性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服务

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

第二步:定义服务契约。我们为WCF service提供的增删查改方法定义服务契约。

serviceContract]
public interface IAcademeservice
{
    [OperationContract]
    List<Product> GetAllProducts();

    [Product SaveProduct(Product product);

    [OperationContract]
    void deleteProduct(Product product);
}

第三步:实现服务:为增删查改方法具体实现。

在这里,提供一个小技巧,在IAcademeservice下点击小箭头,选择实现接口,VS自动为我们生成了上面定义的没有实现的方法

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

接着我们完成这些方法:其中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="@H_322_77@mex" binding="@H_322_77@mexhttpBinding" 
              contract="IMetadataExchange"/>
        </service>
    </services>
</system.serviceModel>

第五步:设置Web应用程序的端口号。把器端口号设置为固定端口52600,在浏览器中查看服务是否正常。

到此,编译一下Web项目,我们已经完成了所有的事情了,下一步就是在Silverlight中调用这个服务了。

@H_607_398@

大佬总结

以上是大佬教程为你收集整理的Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)全部内容,希望文章能够帮你解决Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。