政务系统网站,代替手动修改网站模板标签,灵寿网站建设,做的网站在百度搜索不到目录
一、创建实体数据模型
1.建立数据库连接
2.建立EF实体模型
二.设计窗体和EF应用
1.窗体设计
2.应用程序设计
3.源码
4.生成效果
#xff08;1#xff09;查询
#xff08;2#xff09;修改
#xff08;3#xff09;删除
#xff08;4#xff09;增加 …目录
一、创建实体数据模型
1.建立数据库连接
2.建立EF实体模型
二.设计窗体和EF应用
1.窗体设计
2.应用程序设计
3.源码
4.生成效果
1查询
2修改
3删除
4增加
5.总结 Entity Framework以下简写为 EF 是微软官方发布的 ORM 框架它是基于 ADO.NET 的通过 EF 可以很方便地将表映射到实体对象或将实体对象转换为数据库表。 一、创建实体数据模型
1.建立数据库连接 在SSMS建立数据库连接比如db_EMS建立数据表tb_stock并设置主键。
2.建立EF实体模型 以db_EMS数据库为例将已有的数据库表映射为实体数据操作步骤如下 VS2022→创建新项目→Windows窗体应用.NET Framework→配置项目→设计Form1.cs和Form1.cs[设计]以上部分环节可选具体因人、因事而不同→鼠标选中右侧资源管理器项目名称右键→添加新建项→C#项ADO.NET实体数据模型添加→来自数据库的EF设计器下一步→应用程序使用db_EMS.dbo与数据库建立连接默认自动显现连接字符串默认自动显现默认√并默认把连接设置另存db_EMSEntities下一步→实体框架6.x→选中表及dbo选中在模型中包括外键列和将存储过程和函数导入到实体模型中模型命名空间db_EMSModel默认。→完成。 安装完成后右侧资源管理器增加了Model1.edmx和packages.config。 二.设计窗体和EF应用 对上述已创建的EF实体数据模型通过EF对数据表进行增删改查操作。
1.窗体设计 2.应用程序设计 包括对数据表tb_stock所有记录的查询以商品编号为主键对tb_stock没有的记录用Add()方法增加新的记录Add()方法增加记录影响SQL结果以商品编号为主键对tb_stock已有的记录用Attach()方法修改已有记录其余项目Attach()方法只能修改EF实体记录不影响SQL结果用Remove()删除选中的记录Remove()方法删除记录影响SQL结果 3.源码
//Form1.cs
//通过EF对数据表进行增删改查操作。
//不需要程序建立对SQL的连接
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;namespace _11
{public partial class Form1 : Form{public Form1(){InitializeComponent();}string strID ;//记录选中的商品编号/// summary/// 初始化Form1/// /summaryprivate void Form1_Load(object sender, EventArgs e){groupBox1.Text 设置商品信息;label1.Text 商品编号;label2.Text 商品名称;label3.Text 单位;label4.Text 商品规格;label5.Text 商品型号;label6.Text 产 地;label7.Text 最近进价;label8.Text 库存数量;button1.Text 添加;button2.Text 修改;button3.Text 删除;toolStripMenuItem1.Text 删除;comboBox1.Size new System.Drawing.Size(40,21);textBox1.Size new Size(145, 21);textBox2.Size new Size(145, 21);textBox3.Size new Size(145, 21);textBox4.Size new Size(145, 21);textBox5.Size new Size(145, 21);textBox6.Size new Size(145, 21);textBox7.Size new Size(145, 21);dataGridView1.AllowUserToAddRows true;dataGridView1.AllowUserToDeleteRows true;dataGridView1.AllowUserToResizeColumns false;dataGridView1.AllowUserToResizeRows false;dataGridView1.ReadOnly false;dataGridView1.RowHeadersVisible false;dataGridView1.SelectionMode DataGridViewSelectionMode.CellSelect;dataGridView1.ContextMenuStrip contextMenuStrip1;button3.ContextMenuStrip contextMenuStrip1;comboBox1.Items.AddRange(new object[] { 台, 部, 个, 本, 件, 套 });using (db_EMSEntities db_ new db_EMSEntities()){dataGridView1.DataSource db_.tb_stock.ToList(); //显示数据表中所有信息}}/// summary/// 增加数据表tb_stock的记录/// 增加记录即原表中没有的商品编号/// /summaryprivate void Button1_Click(object sender, EventArgs e){using (db_EMSEntities db_ new db_EMSEntities()){tb_stock _Stock new tb_stock //为tb_stock类中的商品实体赋值{ tradecode textBox1.Text, //商品编号fullname textBox2.Text, //商品全称unit comboBox1.Text, //单位type textBox4.Text, //商品型号standard textBox3.Text, //商品规格produce textBox5.Text, //产地qty Convert.ToInt32(textBox7.Text), //库存数量price Convert.ToDouble(textBox6.Text) //最近进价};db_.tb_stock.Add(_Stock); //将stock记录添加到SQL数据表tb_stockdb_.SaveChanges(); //保存修改dataGridView1.DataSource db_.tb_stock.ToList();//重新绑定数据源更新dataGridView1}}/// summary/// 修改数据表tb_stock选中记录/// 修改记录对原表中即有行编号的记录其余项的修改/// Attach()只修改EF实体不影响SQL/// /summaryprivate void Button2_Click(object sender, EventArgs e){using (db_EMSEntities db_ new db_EMSEntities()){tb_stock _Stock new tb_stock //重新为各个字段复制{tradecode textBox1.Text,fullname textBox2.Text,unit comboBox1.Text, type textBox4.Text,standard textBox3.Text,produce textBox5.Text,qty Convert.ToInt32(textBox7.Text),price Convert.ToDouble(textBox6.Text),};db_.tb_stock.Attach(_Stock); //Attach()只修改EF实体不影响SQL/*db_.tb_stock.Remove(_Stock);*/ //可选对.Attach后的记录执行删除影响SQLdb_.SaveChanges(); //保存修改dataGridView1.DataSource db_.tb_stock.ToList();//重新绑定数据源更新dataGridView1} }/// summary/// 当鼠标选中dataGridView1某cell行时控件Text同步查询各cell内容/// /summaryprivate void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){if (e.RowIndex0) //判断是否选择了行{ strID Convert.ToString(dataGridView1[0, e.RowIndex].Value).Trim(); //获取选中的商品编号using (db_EMSEntities db_ new db_EMSEntities()){ tb_stock _Stock db_.tb_stock.Where(W W.tradecode strID).FirstOrDefault(); //获取指定编号的商品信息textBox1.Text _Stock.tradecode; //显示商品编号textBox2.Text _Stock.fullname; //显示商品全称comboBox1.Text _Stock.unit; //显示商品单位textBox4.Text _Stock.type; //显示商品类型textBox3.Text _Stock.standard; //显示商品规格textBox5.Text _Stock.produce; //显示商品产地textBox7.Text _Stock.qty.ToString(); //显示商品数量textBox6.Text _Stock.price.ToString(); //显示商品价格}}}/// summary/// 删除数据表tb_stock选中行的记录/// 鼠标选中dataGridView1的任意cell,按下删除按钮右键执行删除。/// /summaryprivate void Button3_Click(object sender, EventArgs e){using (db_EMSEntities db_ new db_EMSEntities()){tb_stock _Stock db_.tb_stock.Where(W W.tradecode strID).FirstOrDefault();//查找要删除的记录if (_Stock ! null) //判断要删除的记录是否存在{db_.tb_stock.Remove(_Stock); //构造删除SQL语句db_.SaveChanges(); //执行删除操作dataGridView1.DataSource db_.tb_stock.ToList(); //重新绑定数据源MessageBox.Show(商品信息删除成功);}elseMessageBox.Show(请选择要删除的商品);}}/// summary/// 删除数据表tb_stock选中行的记录/// 鼠标选中dataGridView1的任意cell,右键执行删除。/// /summaryprivate void ToolStripMenuItem1_Click(object sender, EventArgs e){using (db_EMSEntities db_ new db_EMSEntities()){tb_stock _Stock db_.tb_stock.Where(W W.tradecode strID).FirstOrDefault();//查找要删除的记录if (_Stock ! null) //判断要删除的记录是否存在{db_.tb_stock.Remove(_Stock); //构造删除SQL语句db_.SaveChanges(); //执行删除操作dataGridView1.DataSource db_.tb_stock.ToList(); //重新绑定数据源MessageBox.Show(商品信息删除成功);}elseMessageBox.Show(请选择要删除的商品);}}}
}4.生成效果
1查询 鼠标任意点中dataGridView1的cell上其上文本控件同步显示tb_stock记录的内容。 2修改 对文本显示控件的内容进行的修改Attach()方法修改记录仅改变EF实体模型不能影响SQL数据表。 图中文本控件在Attach()方法修改前后数值不变鼠标点击ataGridView1的其他cell处就恢复其内容保持SQL数据表tb_stock不变。而下方dataGridView1的EF实体模型里内容已经被修改了。Attach()方法对EF实体模型的修改只驻留在内存里当关闭项目和再重启项目后消失不见。
3删除 用.RemoveAdd()对数据表tb_stock中不存在的记录进行增加已主键为检索依据。 删除上图的T1002记录。 下方dataGridView1的EF实体模型里已经不见了T1002记录。 更新SQL发现tb_stock里也不见了T1002记录。
4增加 用Add()对数据表tb_stock中不存在的记录进行增加已主键为检索依据。 对上图再增加T1009记录台式商用机、ZHAN99、I316G512M、合肥、12台、2488。 更新SQL发现tb_stock里增加了T1009记录。
5.总结 无论如本文使用的通过选中dataGridView1的EF实体模型的cell单元通过Add()、Attach()、Remove()等方法操作SQL数据表还是通过编程的方法在程序中对指定的数据表单位元进行读写都存在共同的规律
创建EF实体模型的对象比如db_创建实体模型中数据表的对象比如_Stock这个对象就是一个结构体对其内部成员及成员函数进行赋值操作、查询操作等构造访问SQL的语句比如Add()、Attach()、Remove()等更新SQL数据库比如SaveChanges()等可选重新更新到dataGridView1比如dataGridView1.DataSource db_.tb_stock.ToList();实质是SQL更新后其结果同步映射到EF实体模型然后再显示到dataGridView1。