zoukankan      html  css  js  c++  java
  • Linq to sql(十):分层构架的例子(二)

    编写数据访问服务

           首先我们可以定义出留言簿数据访问服务的契约(接口),把如下的代码保存为IDataAccess.cs放在Contract类库项目中:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.ServiceModel;

     

    namespace Contract

    {

        [ServiceContract]

        public interface IDataAccess

        {

            [OperationContract]

            void SendMessage(TbGuestBook gb);

     

            [OperationContract]

            List<TbGuestBook> GetData();

     

            [OperationContract]

            void DeleteMessage(string ID);

     

            [OperationContract]

            void SendReply(TbGuestBook gb);

        }

    }

           在这里定义了四个方法:

    l         创建留言

    l         获取所有留言

    l         删除留言

    l         管理员发表回复

    然后,我们来实现这个契约,把如下代码保存为DataAccess.cs放在Service类库项目中:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using Contract;

    using System.Data.Linq.Mapping;

    using System.IO;

    using System.ServiceModel;

     

    namespace Service

    {

        [ServiceBehavior(IncludeExceptionDetailInFaults = true)]

        public class DataAccess : IDataAccess

        {

            GuestBook ctx;

     

            public DataAccess()

            {

                XmlMappingSource xms = XmlMappingSource.FromXml(File.ReadAllText("c:\\guestbook.map"));

                ctx = new GuestBook("server=srv-devdbhost;database=GuestBook;uid=sa;pwd=Abcd1234", xms);

                ctx.Log = Console.Out;

            }

     

            public void SendMessage(TbGuestBook gb)

            {

                ctx.TbGuestBook.Add(gb);

                ctx.SubmitChanges();

            }

     

            public List<TbGuestBook> GetData()

            {

                var query = from gb in ctx.TbGuestBook orderby gb.PostTime descending select gb;

                return query.ToList();

               

            }

     

            public void DeleteMessage(string ID)

            {

                TbGuestBook gb = ctx.TbGuestBook.Single(message => message.ID == new Guid(ID));

                ctx.TbGuestBook.Remove(gb);

                ctx.SubmitChanges();

            }

     

            public void SendReply(TbGuestBook gb)

            {

               //ctx.ExecuteCommand("update tbGuestBook set reply={0},isreplied=1 where ID={1}", gb.Reply, gb.ID);

                TbGuestBook record = ctx.TbGuestBook.Single(message => message.ID == gb.ID);

                record.IsReplied = true;

                record.Reply = gb.Reply;

                ctx.SubmitChanges();

            }

        }

    }

           这里需要注意几点:

    l         我们把DataContext的操作在控制台输出

    l         在进行发表回复(更新操作)的时候,注释的代码和没有注释的代码虽然都能完成更新操作,但是前者更合理,因为后者会先进行SELECT再进行UPDATE

  • 相关阅读:
    解决winform DataGridView 绑定数字值列排序不对的问题
    C#中向数据库中添加注册新用户,并查询数据库中是否存在同名的用户。
    SQL数据库的脱机与联机操作
    odoo视频教程收集
    odoo10导入导出-转
    草稿-bom- 肥料生产
    freebsd 域名服务器
    freebsd启动报错:My unqualified host name unkown...Sleeping for retry.
    docker-freebsd-20150625
    supervisorctl error
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749016.html
Copyright © 2011-2022 走看看