EF+WCF框架搭建及简单应用

2 篇文章 0 订阅
1 篇文章 0 订阅

EF+WCF框架搭建及简单应用

最近在搞一个底层数据库替换的项目,把之前的SQL server数据库替换成MySQL数据库,里面涉及到了许多的问题,其中最主要的问题就是数据库读取效率问题,在网上搜索“如何提高数据库读取效率”后发现,无非就是使用框架、优化sql语句等,这就不免让我想起了我老早之前学习的EF+ WCF框架,这个框架读取效率比较高,扩展性好,相较于最原始的sql语句来说优点很多,所以我最近花了点时间重新搭建了一个EF+WCF框架,并进行简单的应用。
下面我将详细介绍我的搭建过程和代码,只要按照我的流程来一定可以完成自己的EF+WCF框架,那么我们就开始吧。
vs版本:vs2015
EF实体框架:实体框架5.0
在这里插入图片描述

  • 第一步 :创建解决方案
    打开vs2015,并新建一个解决方案(EF+WCFSolution)。添加完成解决方案后,会在你右侧的解决方案资源管理器中生成你刚创建的解决方案。
    在这里插入图片描述

  • 第二步:创建应用程序的主入口
    右键解决方案,点击添加,新建项目,弹出添加新项目功能界面,选择Windows窗体应用程序,名称为MainForm。点击确定。会在你右侧的解决方案资源管理器中生成你刚创建的Windows窗体应用程序。
    在这里插入图片描述

  • 第三步:搭建WCF
    右键解决方案,点击添加,新建项目,弹出添加新项目功能界面,在右侧搜索框内输入WCF,然后选择WCF服务库,名称为WcfServiceLibrary。点击确定。会在你右侧的解决方案资源管理器中生成你刚创建的WCF服务库。
    在这里插入图片描述
    在这里插入图片描述

  • 第四步:搭建EF

    • 1:创建DataBase文件夹用于存放EF框架信息
      右键解决方案,点击添加,点击新建解决方案文件夹,编辑文件夹名称为DataBase
      在这里插入图片描述

    • 2:添加底层数据操作类库
      右键DataBase文件夹,点击添加,点击新建项目,弹出添加新项目功能界面,选择类库,名称为DataSource,点击确定,会在你右侧的解决方案资源管理器中生成你刚创建的底层数据库操作类库。
      在这里插入图片描述

    • 3:创建EF框架
      右键你刚创建的DataSource类库,点击添加,点击新建项目,弹出添加新项目功能界面,选择ADO.NET实体数据模型,修改名称为EFModel,点击添加,弹出实体数据模型创建向导;
      在这里插入图片描述
      选择来自数据库的EF设计器,点击下一步;
      在这里插入图片描述
      按下图选择和输入对应的连接信息,点击测试链接,如果连接成功,点击确定即可,不过不成功,需要检查数据库服务和你选择填写的信息是否有误。
      在这里插入图片描述
      将App.config中的连接设置另存这个选择上,然后自定义你的数据库模型实体类名称,点击下一步。
      在这里插入图片描述
      注意这里要选择实体框架5.0,具体原因我在往期的文章(vs2015中搭建EF框架在代码生成策略中找不到“旧的ObjectContext”)中说过,可以看一下这里就知道是啥原因了。点击下一步。
      在这里插入图片描述
      选择你要生成模型的表,自定义模型的命名空间,点击完成,即可在解决方案资源管理器中生成对应的EF框架
      在这里插入图片描述

    • 4:修改EF框架为“旧的ObjectContext”模板下的EF框架
      需要注意的是,上面步骤生成的EF框架是T4模板生成的EF框架,内部的模型代码没有自动生成,这就需要你手动写,但是手动写又存在出错的风险,所以我们这里需要修改生成EF框架的模板为“旧的ObjectContext”,具体步骤如下:
      删除EF框架下生成的TT文件
      在这里插入图片描述
      双击EFMdel.edmx文件,右键左侧模型区域,选择属性,修改最上面的代码生成策略为“旧的ObjectContext”,然后重新生成此类库,可以发现EFModel.Designer.cs里面自动生成了模型代码。至此我们EF框架就创建好了,接下来我们需要编写数据处理的类和数据配置类
      在这里插入图片描述
      在这里插入图片描述

  • 第五步:编写数据处理类
    上面我们在DataSource中创建的EF框架,相当于就是创建了数据库对象,接下来我们就要对数据库进行增删改查操作。在database文件夹中创建DataProcessing类库(创建类库操作和上面的一致),并在类库中添加livestockInfoOprate.cs类,此类的作用就是对livestockInfo表进行增删改查。
    编写livestockInfoOprate.cs文件,具体见下述代码
    在这里插入图片描述

using DataSource;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataProcessing
{
    public class livestockInfoOprate
    {
        public List<livestockInfo> GetlivestockInfo()
        {
            using (livestockEntities entity = new livestockEntities())
            {
                return entity.livestockInfo.ToList();
            }
        }
    }
}

  • 第六步:编写数据配置类
    编写完数据库操作类后,我们需要统一的配置类进行数据库配置,在database文件夹中创建DataAdapter类库(创建类库操作和上面的一致),并在类库中添加livestockInfo.cs类,此类的作用就是对livestockInfo表的功能进行外部配置显示,以方便调用。
    编写livestockInfoOprate.cs文件,具体见下述代码
using DataProcessing;
using DataSource;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAdapter
{
    public class livestockInfo
    {
        private livestockInfoOprate mTestOprate;
        public livestockInfo()
        {
            mTestOprate = new livestockInfoOprate();
        }
        public List<DataSource.livestockInfo> GetlivestockInfo()
        {
            try
            {
                return mTestOprate.GetlivestockInfo();
            }
            catch(System.Exception ep) { return null; }
        }
    }
}

  • 第七步:在WCF的服务接口中编写数据库读取接口
    只需要在下图所示位置编写数据接口,如下图所示。
    在这里插入图片描述
        [OperationContract]
        List<livestockInfo> GetlivestockInfo();
  • 第八步:在Service1中实现数据读取接口
    在这里插入图片描述
        public List<DataSource.livestockInfo> GetlivestockInfo()
        {
            return mTest.GetlivestockInfo();
        }
  • 第九步:功能调用,测试EF+WCF框架是否能操作数据库
    在系统启动项类库的MainForm窗体中进行设计,并实现livestockInfo表中数据的获取
    主界面设计
    Mainform后台代码:
using DataSource;
//using ServicesLib;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WcfServiceLibrary;

namespace MainForm
{
    public partial class Form1 : Form
    {
        Service1 mService1 = new Service1();
        //Services mServices = new Services();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            List<livestockInfo> mlist = mService1.GetlivestockInfo();
            if(mlist != null && mlist.Count() > 0)
            {
                //dataGridView1.DataSource = mlist;
                for (int i = 0; i < mlist.Count(); i++)
                {
                    livestockInfo one = mlist[i];
                    DataGridViewRow row = new DataGridViewRow();
                    int index = dataGridView1.Rows.Add(row);
                    dataGridView1.Rows[index].Cells[0].Value = one.id;
                    dataGridView1.Rows[index].Cells[1].Value = one.sex;
                    dataGridView1.Rows[index].Cells[2].Value = one.ange;
                    dataGridView1.Rows[index].Cells[3].Value = one.length;
                    dataGridView1.Rows[index].Cells[4].Value = one.height;
                    dataGridView1.Rows[index].Cells[5].Value = one.weight;
                    dataGridView1.Rows[index].Cells[6].Value = one.birthdate;
                    if (one.deathdate != null && one.deathdate.ToString() != "")
                        dataGridView1.Rows[index].Cells[7].Value = one.deathdate;
                    if (one.status != null && one.status.ToString() != "")
                        dataGridView1.Rows[index].Cells[8].Value = one.status;
                }
            }
        }
    }
}

  • 第十步:启动系统,进行测试
    这个时候你会发现会报错,或者是没有获取到数据,跟代码你会发现报的错误是:“指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效。”,上网一查,是因为你配置信息中(App.config)缺少连接数据库的配置信息,需要注意的是你的启动项下的App.config也需要数据库连接的配置信息,这个时候你需要下述代码写到启动项下的App.config的指定位置处
    在这里插入图片描述
  <connectionStrings>
    <add name="livestockEntities" connectionString="metadata=res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=livestock;Persist Security Info=True;User ID=sa;Password=那数据库密码;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

这时你再启动项目,会发现可以获取livestockInfo表中的所有信息。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

生生不息0.o

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

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

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

打赏作者

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

抵扣说明:

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

余额充值