合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# Entity Framwork 与ADO.net的区别 https://www.cnblogs.com/nodot1/p/9514982.html https://blog.csdn.net/wangzl1163/article/details/72897170 两者都是数据访问技术。可以说entity是在 ado.net 上面 的优化和二次开发。 也就是说使用了 EOF 模型以后,无需再写 sql 语句。比如对象 eof.add()就可以代表 sql 的添加数据的语句了。 它们有以下几点区别: ADO.Net是开发人员自己select、update等写sql语句,来实现对数据库的增删改查等操作;采用EF进行开发操作数据库的时候,只需要操作对象,这样做使开发更方便,此时可以让开发人员使用C#的语法,来完成对数据库进行操作,完全的面向对象思想。 ADO.Net对内存消耗较小;而EF对内存消耗比较大,EF的性能不如ADO.Net. 代码的可读性。使用EF的代码的可读性更高。 联系:EF的底层是基于ADO.Net技术的。比如对数据操作的时候最终都是转化成SQL语句的。 > entity framwork虽然可读性更高,但占用内存更大,建议如果不是必须,不用迷信。 # 创建entity framwork实体数据模型 在解决方案资源管理器中右击 => 添加 => ADO实体数据模型。 >注意命名:只要第一步生成实体模型命名即可。名字可以跟数据库名字一样,比如“审图表”。后续有几个需要输入名字的最好不要变,默认即可。比如该实体模型的连接,会自动叫“审图表Entities”;命名空间的名字会自动叫“审图表Model”。 会出现后缀名为.edms的文件。 ![](https://box.kancloud.cn/8a7ded89078bb0c031b621b066f766f6_323x325.png) 出现图形界面 ![](https://box.kancloud.cn/2b6f88ea46e3ccee0563c62bdf473df1_551x351.png) > 注:如果数据库中无主键,则无法形成可视化的实体模型。 # 删除entity framwork实体数据模型 在解决方案中右击即可删除。包括下拉的内容。 ![](https://box.kancloud.cn/bcfce8ffd0d98f9a4ee588ffc07b17f0_345x392.png) 但删除完后,如果要再新建一个同名的entity framwork模型则会提示:与现有连接设置重复。 此时需打开App.config,在 `connectionSring`中,将就的`add name` 删除,即可添加。 ![](https://box.kancloud.cn/2ae8e4c94cfdd2d7097a2d0220e92b32_322x372.png) ![](https://box.kancloud.cn/ef743cb468aef557852f3c5d0f71a5f0_1161x528.png) # 利用EF实体数据模型实现数据增删改查 需要创建using命名空间。 ## 显示 利用dataGridView控件,让选中的数据记录可以显示在上面。 ![](https://box.kancloud.cn/042342ba0dd7914ebfba4ae2586bd5f4_780x390.png) 先要出发dataGridView中的CellClick事件。如果双击DGV控件,那么出现的是CellContentClick事件。所以要单击后再选择小闪电。3双击即可触发。 ![](https://box.kancloud.cn/019080ec23da9bbd53d79c40b95bdc74_891x433.png) ``` private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > 0)//判断选中的行是否有内容 { strPMID = Convert.ToString(dataGridView1[0, e.RowIndex].Value).Trim();//中括号内表示行、列索引号,trim的意思是删除头尾中的空格。 using (审图表Entities1020 EFdb = new 审图表Entities1020()) //实例化审图表实体模型 { 审核信息 shxx = EFdb.审核信息.Where(W => W.项目编号 == strPMID).FirstOrDefault(); //实例化审图表实体模型下的审核信息表,用strPMID关键字段进行查找,生成一张只有一行的临时表。 if (shxx != null) { tb_xmbh.Text = shxx.项目编号; tb_zgsbh.Text = shxx.子公司编号; tb_pjname.Text = shxx.项目名称; tb_pjmanager.Text = shxx.项目经理; tb_signdate.Text = shxx.登记时间.ToString(); } } } } ``` ## 增加 ``` private void btn_add_data_Click(object sender, EventArgs e) { //添加数据操作 using (审图表Entities1020 EFdb = new 审图表Entities1020())//创建实体数据模型 { 审核信息 shxx = new 审核信息 //通过ef实体模型中的表名创建实体对象 { //为实体对象赋值,也就是各个字段的值 项目编号 = tb_xmbh.Text, 子公司编号 = tb_zgsbh.Text, 项目名称 = tb_pjname.Text, 项目经理 = tb_pjmanager.Text, 登记时间 = Convert.ToDateTime(tb_signdate.Text), }; EFdb.审核信息.Add(shxx);//添加模型.表名的 EFdb.SaveChanges();//对操作写入数据库 dataGridView1.DataSource = EFdb.审核信息.ToList();//直接更新数据库显示 } } ``` ## 修改 ``` private void btn_modify_Click(object sender, EventArgs e) { using (审图表Entities1020 EFdb = new 审图表Entities1020()) { 审核信息 shxx = new 审核信息 { 项目编号 =tb_xmbh.Text };//被放到这里的字段是不能改动的,否则就会出现错误提示 EFdb.审核信息.Attach(shxx);//构造sql语句 //重新为除了项目编号以外的各个字段赋值 shxx.子公司编号 = tb_zgsbh.Text; shxx.项目名称 = tb_pjname.Text; shxx.项目经理 = tb_pjmanager.Text; shxx.登记时间 = Convert.ToDateTime(tb_signdate.Text); EFdb.SaveChanges(); dataGridView1.DataSource = EFdb.审核信息.ToList(); MessageBox.Show("修改成功!"); } } ``` ## 删除 要实现的是:在DataGridView 控件中右击,可启动“删除”功能。 1、需添加右击的控件,以实现功能; 2、完成“删除”动作的代码 1、在form1窗口中添加contextMenuStrip1控件,以便能右击 ![](https://box.kancloud.cn/50bc324f09b4be4743d77c937ea66ed1_850x489.png) 2、双击左上角“删除”两个字,就能启动控件代码 ``` private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) { using (审图表Entities1020 EFdb = new 审图表Entities1020())//创建ef实体模型的对象 { //查找要删除的记录并显示在上面的框中,与新建不同 审核信息 shxx = EFdb.审核信息.Where(W => W.项目编号 == strPMID).FirstOrDefault();//创建实体模型中表格的对象,返回值是只包含一行的一张表 try { if (shxx != null) { EFdb.审核信息.Remove(shxx); EFdb.SaveChanges(); dataGridView1.DataSource = EFdb.审核信息.ToList(); MessageBox.Show("删除成功"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } ``` # 连接数据库的更新 图形界面右击 ![](https://box.kancloud.cn/e23da69788bd26c60d3f732712cf7af0_509x399.png)