案例实作图解.Net Entity Framework 教程(转)
案例实作图解.Net Entity Framework 教程
可以跟随我操作成功的截图一步步进行实作。
第零章 Entity Framework资源链接和版本
一 资源链接
Microsoft的EF链接:
https://msdn.microsoft.com/en-us/data/aa937723.aspx
二 版本
截至今日-2015年2月,EF的最新版本为6.1。
第一章 使用VS2012+Entity Framework 6.1 开发Winform版本的超市管理系统
一 关于用Nuget程序包管理器安装EF 6.1
网上有甚多教程讲述使用Nuget程序包管理器安装EF 6.1。经鄙人证明,用Nuget程序包管理器安装EF 6.1,是针对单个解决方案的。首先新建一个Form项目SuperMarket,选择菜单 项目-管理Nuget程序包 ,如下图;
没有已经安装的包;以前曾经建立一个空项目EF1,用NuGet安装过EF6.1,如下图;
在SuperMarket中选择最近的程序包,如下图;
点击安装进行安装;
安装之前和之后,解决方案SuperMarket的目录结构分别如下:
由图可见,安装之后,在解决方案下添加packages文件夹,其中包含EF6.1的lib和tool;同时在项目中自动添加引用,如下图;
二 建立主窗体和添加商品窗体,用EF6.1 浏览和添加商品
1 数据库
项目所有Sql Server数据库下载:
http://pan.baidu.com/s/1bn50Oij
下载后导入Sql Server,即可继续进行后续;
2 建立主窗体,添加商品窗体,添加实体数据模型
主窗体顶部为菜单,左侧添加一个TreeView,设计时在TreeView任务中按超市管理内容编辑节点;添加商品窗体和普通添加记录型窗体。
右击项目,添加新项,添加ADO.NET实体数据模型,
完成后项目结构如下;
在项目中多出了superMarketModel.edmx。
3 实现商品浏览
在主窗体中添加窗体级变量:
SuperMarketEntities smef;
在窗体启动事件中生成:
smef = new SuperMarketEntities();
在TreeView的节点选中事件中添加代码如下:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
switch (e.Node.Text)
{
case "商品浏览":
var shpquery = smef.Merchandise; //Merchandise为商品表
var list = shpquery.ToList();
dataGridView1.DataSource = list;
break;
case "新增商品":
af = new addShpForm();
af.ShowDialog();
break;
default:
break;
}
}
在不用EF时返回整个表通常是一个DataSet;使用EF时则返回的一个List,把该List赋值给grid控件的DataSource属性即可;运行,结果如下图:
4 实现添加商品
在addShpForm添加窗体级变量:
SuperMarketEntities smef;
addShpForm启动事件:
smef = new SuperMarketEntities();
var query = smef.Sort;
foreach (Sort c in query)
{
comboBox1.Items.Add(c.SortName);
}
在窗体启动时获取商品类别表类别名称字段的所有内容添加到comboBox1,以供录入数据时选择;
添加商品按钮事件代码:
//添加商品
private void button1_Click(object sender, EventArgs e)
{
try
{
int sequencenum=smef.Database.ExecuteSqlCommand("select max(sequencenumber) from merchandise");
sequencenum=sequencenum+1;
Merchandise m = new Merchandise();
m.MerchandiseNumber = textBox1.Text;
m.TreatyCode = textBox2.Text;
string sortname="";
switch(comboBox1.Text)
{
case "电器类":
sortname="DQ1004";
break;
case "礼品类":
sortname="LP1006";
break;
case "日用品":
sortname="RY1005";
break;
case "蔬果类":
sortname="SG1003";
break;
case "食品类":
sortname="SP1002";
break;
case "生鲜类":
sortname="SX1001";
break;
default:
break;
}
m.SortNumber=sortname;
m.RetailPrice=Convert.ToDecimal(textBox3.Text);
m.MerchandiseName=textBox4.Text;
m.MerchandiseSpec=textBox5.Text;
m.Units=textBox6.Text;
m.PurchasePrice=Convert.ToDecimal(textBox7.Text);
m.CheckTerm=Convert.ToDecimal(textBox8.Text);
m.Remark=textBox9.Text;
smef.Merchandise.Add(m);
smef.SaveChanges();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
商品表第一个字段为整型的sequencenumber,每添加一个记录,获取该字段最大值,然后加1,赋给新记录;此处使用在EF中直接执行SQL来获取最大值;
smef.Database.ExecuteSqlCommand("select max(sequencenumber) from merchandise");
后面的代码把文本框的值赋给Merchandise对象m;添加m,保存修改即可,如上代码所示;运行,结果如下图;
添加成功:
这样我们就通过EF实现了在商品表中添加生鲜类商品“金条”的操作。