WCF---用WCF实现Linq+Winform架构数据库开发Demo

 



 

点击下载Demo源码

先看一下项目整体分层架构

 

 

  1. Entity实体层。这里使用Linq To Sql来实现。数据库比较简单只放了一张TB_GuestBook表

 

 

需要注意的是为了支持WCF,要右击空白处设置序列化模式为单向。

 

表中添加了一个timestamp时间戳类型,在直接使用Linq自动生成sql功能进行update操作时,需要有一个时间戳字段,或是在linq设计页面选择表的一个字段设置为时间戳。才能正常update到数据库中。如果是调用自定义的存储过程就可以省略这步。

 

2.契约层,即服务向客户端提供的接口。

 

namespace Contract
{
    [ServiceContract]
    public interface IGuestBook
    {
        /// <summary>
        /// 新增信息
        /// </summary>
        /// <param name="tb">信息体</param>
        /// <returns>执行结果</returns>
        [OperationContract]        
        bool Add(TB_GuestBook tb);

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        [OperationContract]
        bool Delete(int id);

        /// <summary>
        /// 修改信息
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        [OperationContract]
        bool Update(TB_GuestBook tb);

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        List<TB_GuestBook> GetList();
    }
}

 

3. WCF服务实现层。主要实现对应接口的方法。

namespace WcfService
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“GuestBook”。
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class GuestBook : IGuestBook
    {
        GuestBookDataContext dc;
        public GuestBook()
        {
            dc = new GuestBookDataContext();
        }

        public bool Add(TB_GuestBook tb)
        {
            try
            {
                dc.TB_GuestBook.InsertOnSubmit(tb);
                dc.SubmitChanges();
            }
            catch (Exception)
            {
                return false;
                throw;
            }
            return true;
        }

        public bool Delete(int id)
        {
            try
            {
                TB_GuestBook tb = dc.TB_GuestBook.SingleOrDefault(e => e.ID == id);
                dc.TB_GuestBook.DeleteOnSubmit(tb);
                dc.SubmitChanges();
            }
            catch (Exception)
            {
                return false;
                throw;
            }
            return true;
        }

        public bool Update(TB_GuestBook tb)
        {
            try
            {
                dc.TB_GuestBook.Attach(tb, true);
                dc.SubmitChanges();
            }
            catch (Exception)
            {
                return false;
                throw;
            }
            return true;
        }


        public List<TB_GuestBook> GetList()
        {
            try
            {
                return dc.TB_GuestBook.ToList();
            }
            catch (Exception)
            {
                return null;
                throw;
            }
        }
    }
}

4.部署服务到IIS。服务实现层编译完成后,在IIS中添加虚拟目录(或网站),目录位置为服务层所在文件夹。

在IIS中右击GuestBook.svc->浏览.可看到页面显示说明可以客户端正常调用服务了。

 

 

5.Winform客户端

 

右击Service References,添加服务引用

 

引用地址为IIS中浏览的页面地址

 

在此处可以看到WCF提供的几个方法。重命名空间名GuestBookService,确定后可看到服务已经添加到客户端。

 

 

控件数据绑定:

添加一个DataGridView,DataSource的属性点击下拉按钮,在“其他数据源”下可以找到服务提供的数据源TB_GuestBook,选中它。

 

选完后系统会生成一个tbGuestBookBindingSource的数据源。将几个文本框的Text属性都绑定到该数据源下的对应字段上。

比如ID文本框的设置如下:

 

控件都绑定完成后,就可以写功能代码了。

1.加载数据:先声明一个服务代理变量GuestBookClient dc ;

加载数据方法调用WCF服务代理的getList方法,直接赋值给BindingSource

 

        private void LoadData()
        {
            tbGuestBookBindingSource.DataSource = dc.GetList();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadData();
        }

删除按钮:

        private void btnDel_Click(object sender, EventArgs e)
        {
            TB_GuestBook tb = tbGuestBookBindingSource.Current as TB_GuestBook;
            if (tb != null)
            {
                if (dc.Delete(tb.ID))
                {
                    LoadData();
                    MessageBox.Show("删除成功.");
                }
                else
                    MessageBox.Show("删除失败.");
            }
            else
            {
                MessageBox.Show("选择的对象为空");
            }
        }

保存按钮:

        private void btnSave_Click(object sender, EventArgs e)
        {
            TB_GuestBook tb = tbGuestBookBindingSource.Current as TB_GuestBook;  
            
            if (dc.Update(tb))
            {
                LoadData();
                MessageBox.Show("更新成功.");
            }
            else
                MessageBox.Show("更新失败.");
        }

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值