当前位置:Gxlcms > 数据库问题 > Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

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

时间:2021-07-01 10:21:17 帮助过:3人阅读

(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{ } [Column(Storage="_ProductName", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)] [DataMember(Order=2)] public string ProductName{ } [Column(Storage="_ProductType", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)] [DataMember(Order=3)] public string ProductType{ } [Column(Storage="_CompleteTime", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)] [DataMember(Order=4)] public string CompleteTime{ } [Column(Storage="_ProductImage", DbType="VarChar(300)", UpdateCheck=UpdateCheck.Never)] [DataMember(Order=5)] public string ProductImage{ } [Column(Storage="_Principal", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)] [DataMember(Order=6)] public string Principal{ } [Column(Storage="_AwardUnit", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)] [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();

    [OperationContract]
    Product SaveProduct(Product product);

    [OperationContract]
    void DeleteProduct(Product product);
}

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

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

技术分享

接着我们完成这些方法:其中SaveProduct方法用于更新和插入数据,这里使用了LINQ to SQL语句。

public class AcademeService : IAcademeService
{
    public List<Product> GetAllProducts()
    {
        AcademeDataContext db = new AcademeDataContext();
        var products = from p in db.Products
                       select p;
        return products.ToList<Product>();
    }

    public Product SaveProduct(Product product)
    {
        AcademeDataContext db = new AcademeDataContext();
        if (product.ProductID > 0)
        {
            //更新记录
            db.Products.Attach(product, true);
        }
        else
        {
            //插入记录
            db.Products.InsertOnSubmit(product);
        }
        db.SubmitChanges();
        return product;
    }

    public void DeleteProduct(Product product)
    {
        AcademeDataContext db = new 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中调用这个服务了。

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

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

标签:

人气教程排行