做网络网站需要三证么,网络营销与网络推广的异同,深圳哪家网站建设的公司好,中国舆情在线目录
一、前言
1.Database.ExecuteSqlCommand 方法不被EF7.0支持
2.SET IDENTITY_INSERT Blog {ON,OFF}不起作用
3.主键和标识列分离#xff0c;成功实现插入与修改
二、新建本文涉及的项目
三、程序设计
1.Form1.cs源码
2.Form1.cs[设计]
四、生成和测试
1.原始表 …目录
一、前言
1.Database.ExecuteSqlCommand 方法不被EF7.0支持
2.SET IDENTITY_INSERT Blog {ON,OFF}不起作用
3.主键和标识列分离成功实现插入与修改
二、新建本文涉及的项目
三、程序设计
1.Form1.cs源码
2.Form1.cs[设计]
四、生成和测试
1.原始表
2.空内容追加
3.有内容追加、删除记录ID2、插入记录ID3
4.插入记录ID33
5.修改记录ID31
五、后记 一、前言 在发布这篇文章之前先说一下作者为了实现通过EF修改已有数据库记录和在任意空位置插入数据库记录所做过的一些尝试做这些尝试很累甚至一度失望。因为EF已经更新到7.0(刚刚又更新到了8.0)EF7相对于EF6之前的版本有了一些改变甚至放弃了一些不安全的对数据库操作的函数缺少经验的人在不知道到的情况下继续使用那些在EF7以后的版本不再支持的函数找不到原因的时候是很崩溃的。现在总结一下在写本文时遭遇的EF6函数不再被EF7支持的“花絮”。 我的环境VS2022Windows窗体应用.NET 7.0NuGet程序包microsoft.entityframeworkcore.7.0.14、microsoft.entityframeworkcore.design.7.0.14、microsoft.entityframeworkcore.relational.7.0.14、microsoft.entityframeworkcore.sqlserver.7.0.14、microsoft.entityframeworkcore.tools.7.0.14。 数据库Blogging 。
1.Database.ExecuteSqlCommand 方法不被EF7.0支持 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1061 “DatabaseFacade”未包含“ExecuteSqlCommand”的定义并且找不到可接受第一个“DatabaseFacade”类型参数的可访问扩展方法“ExecuteSqlCommand”(是否缺少 using 指令或程序集引用?) 10_10 C:\Users\YCZN_MT\Desktop\10_10\10_10\Form1.cs 71 活动 在db.Database.后面的方法里根本就找不到ExecuteSqlCommand了。
2.SET IDENTITY_INSERT Blog {ON,OFF}不起作用 db.Database.ExecuteSql($SET IDENTITY_INSERT Blog ON) 对数据库记录的写入操作 db.Database.ExecuteSql($SET IDENTITY_INSERT Blog OFF) 以上组合根本就不起作用网络上的 db.Database.ExecuteSqlCommand (各种经验因为不被.NET 7.0支持即使替换上 db.Database.ExecuteSql也不起作用在 db2.SaveChanges()处就停下来了根本就不能将数据写入数据库。无法改变标识列的开与关。 提示“当 IDENTITY_INSERT 设置为 OFF 时不能向表 Blog 中的标识列插入显式值。”
3.主键和标识列分离成功实现插入与修改 当主键和IDENTITY列是同一列时由于EF7废弃了Database.ExecuteSqlCommand (方法致使无法在C#中编程实现对SET IDENTITY_INSERT Blog ON或OFF。SQL里的标识列始终起作用SQL不接受插入不存在记录和修改数据已有记录。 采用主键和IDENTITY列分离新增加一个列作为标识列起辅助作用用途只为了实现插入和修改记录。 采用主键和IDENTITY列分离后依赖原来的IDENTITY列的追加功能需要用编程的方法对BlogId字段进行赋值本文采用的赋值算法是BlogIdInsertId-1即BlogId始终等于上一条记录的IDENTITY值。 下面发布正文
二、新建本文涉及的项目 由于作者前期的文章关于这一步都有涉及因此此处只写过程的操作摘要 VS2022新建Windows窗体应用.NET 7.0NuGet程序包版本7.0.14→工具、连接到数据库Blogging → 逆向工程生成EF实体模型及数据库上下文→设计Form1.cs[设计]和Form1.cs→生成测试。 其中PM Scaffold-DbContext ServerDESKTOP-3LV13FS;DatabaseBlogging;Trusted_ConnectionTrue;TrustServerCertificatetrue;integrated securitySSPI; Microsoft.EntityFrameworkCore.SqlServer 数据库更新时PM Scaffold-DbContext-Force ServerDESKTOP-3LV13FS;DatabaseBlogging;Trusted_ConnectionTrue;TrustServerCertificatetrue;integrated securitySSPI; Microsoft.EntityFrameworkCore.SqlServer
三、程序设计
1.Form1.cs源码
//Form1.cs
//EF7对已有数据库增加、删除、修改、插入
using System.Data;namespace _10_10
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// summary/// 初始化Form1/// 初始化表格显示数据表/// /summary#region Form1_Loadprivate void Form1_Load(object sender, EventArgs e){button1.Text 追加;button2.Text 删除;button3.Text 插入/覆盖;label1.Text 追加的Url;label2.Text 删除的ID;label3.Text 插入记录;button1.Size new Size(40, 23);button2.Size new Size(40, 23);textBox2.Size new Size(30, 23);textBox3.Size new Size(30, 23);textBox4.Size new Size(125, 23);dataGridView1.AllowUserToAddRows false;dataGridView1.AllowUserToDeleteRows false;dataGridView1.AllowUserToResizeColumns false;dataGridView1.AllowUserToResizeRows false;dataGridView1.RowHeadersVisible false;dataGridView1.AutoSizeColumnsMode DataGridViewAutoSizeColumnsMode.AllCells;using var db new BloggingContext();dataGridView1.DataSource db.Blogs.ToList();}#endregion Form1_Load/// summary/// 追加Add()/// 无论ID是否连续都在数据库末尾追加新纪录/// /summary#region 追加记录private void Button1_Click(object sender, EventArgs e){int _rows dataGridView1.Rows.Count;using var db new BloggingContext();if (textBox1.Text ! ){ var table new Blog{BlogId Convert.ToInt32(dataGridView1.Rows[_rows - 1].Cells[2].Value.ToString()),Url textBox1.Text.Trim().ToString()};db.Blogs.Add(table); //追加记录db.SaveChanges();dataGridView1.DataSource db.Blogs.ToList();}else{var table new Blog{BlogId Convert.ToInt32(dataGridView1.Rows[_rows-1].Cells[2].Value.ToString()),Url http://www.hao123.com/}; db.Blogs.Add(table);//追加记录db.SaveChanges();dataGridView1.DataSource db.Blogs.ToList();}}#endregion 追加记录/// summary/// 删除Remove()/// /summary#region 删除记录private void Button2_Click(object sender, EventArgs e){if (textBox2.Text ! string.Empty){using var db new BloggingContext();var data (from tb in db.Blogs where tb.BlogId Convert.ToInt32(textBox2.Text.Trim()) select tb).FirstOrDefault(); //判断数据表中是否包含要删除的IDif (data ! null){using var db2 new BloggingContext();var tableNew new Blog{BlogId Convert.ToInt32(textBox2.Text.Trim())};db2.Blogs.Remove(tableNew); //删除记录按IDdb2.SaveChanges();dataGridView1.DataSource db2.Blogs.ToList();}else{MessageBox.Show(数据表中没有这个ID请重新输入, 提示);}}else{MessageBox.Show(请输入要删除记录的编号, 提示);}}#endregion 删除记录/// summary/// 插入或覆盖/// 要插入的ID存在则覆盖原纪录/// 要插入的ID不存在则添加记录/// Linq无法直接更新主键的数据只能是先将此条信息复制出来把原来的那条数据删除/// 再重新插入一条修改后的数据若不是主键数据则直接更新/// /summary#region 插入或覆盖记录private void Button3_Click(object sender, EventArgs e){if (textBox3.Text.Trim() string.Empty){MessageBox.Show(ID不能为空请重新输入,提示);}else{using var db new BloggingContext();//db.Database.ExecuteSql($SET IDENTITY_INSERT Blog ON); var data (from tb in db.Blogswhere tb.BlogId Convert.ToInt32(textBox3.Text.Trim())select tb).FirstOrDefault();//判断数据表中是否包含要插入的IDif (data ! null){using var db2 new BloggingContext();//db2.Database.ExecuteSql($SET IDENTITY_INSERT Blog ON);var tableNew new Blog{BlogId Convert.ToInt32(textBox3.Text.Trim()),Url textBox4.Text.Trim().ToString()}; db2.Blogs.Remove(data); //移除老数据 db2.Blogs.Add(tableNew); //添加新数据db2.SaveChanges(); //执行更新操作//db2.Database.ExecuteSql($SET IDENTITY_INSERT Blog OFF);dataGridView1.DataSource db2.Blogs.ToList();}else{using var db2 new BloggingContext();//db2.Database.ExecuteSql($SET IDENTITY_INSERT Blog ON);var table new Blog{BlogId Convert.ToInt32(textBox3.Text.Trim()),Url textBox4.Text.Trim().ToString()};db2.Blogs.Add(table); //执行插入操作db2.SaveChanges();//db2.Database.ExecuteSql($SET IDENTITY_INSERT Blog OFF);dataGridView1.DataSource db2.Blogs.ToList();}//db.Database.ExecuteSql($SET IDENTITY_INSERT Blog OFF);} }#endregion 插入或覆盖记录}
}2.Form1.cs[设计] 四、生成和测试
1.原始表 2.空内容追加 3.有内容追加、删除记录ID2、插入记录ID3、35 4.插入记录ID33 5.修改记录ID31 五、后记 本文所使用的主键和标识列分离的方法实现对数据库已有记录的修改不存在的记录的插入操作仅代表作者的一种实现方法不代表是唯一的实现方法。也许读者们有更好的实现办法。希望在日后的工作中此方面能与读者共勉共研。 文章转载自: http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn http://www.morning.rrrrsr.com.gov.cn.rrrrsr.com http://www.morning.brcdf.cn.gov.cn.brcdf.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn http://www.morning.xkbdx.cn.gov.cn.xkbdx.cn http://www.morning.gghhmi.cn.gov.cn.gghhmi.cn http://www.morning.bybhj.cn.gov.cn.bybhj.cn http://www.morning.ypnxq.cn.gov.cn.ypnxq.cn http://www.morning.sqxr.cn.gov.cn.sqxr.cn http://www.morning.smsjx.cn.gov.cn.smsjx.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.tpqrc.cn.gov.cn.tpqrc.cn http://www.morning.sxhdzyw.com.gov.cn.sxhdzyw.com http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.huihuangwh.cn.gov.cn.huihuangwh.cn http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.cwnqd.cn.gov.cn.cwnqd.cn http://www.morning.fwkpp.cn.gov.cn.fwkpp.cn http://www.morning.xwgbr.cn.gov.cn.xwgbr.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.qdrrh.cn.gov.cn.qdrrh.cn http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.zkqjz.cn.gov.cn.zkqjz.cn http://www.morning.snkry.cn.gov.cn.snkry.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.ctrkh.cn.gov.cn.ctrkh.cn http://www.morning.zbpqq.cn.gov.cn.zbpqq.cn http://www.morning.bwkzn.cn.gov.cn.bwkzn.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.brzlp.cn.gov.cn.brzlp.cn http://www.morning.hnpkr.cn.gov.cn.hnpkr.cn http://www.morning.qprtm.cn.gov.cn.qprtm.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.jhwwr.cn.gov.cn.jhwwr.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.trqsm.cn.gov.cn.trqsm.cn http://www.morning.wspyb.cn.gov.cn.wspyb.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.kyytt.cn.gov.cn.kyytt.cn http://www.morning.xqkcs.cn.gov.cn.xqkcs.cn http://www.morning.spfh.cn.gov.cn.spfh.cn http://www.morning.rbbgh.cn.gov.cn.rbbgh.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn http://www.morning.pbknh.cn.gov.cn.pbknh.cn http://www.morning.wyctq.cn.gov.cn.wyctq.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn http://www.morning.ctrkh.cn.gov.cn.ctrkh.cn http://www.morning.hxlpm.cn.gov.cn.hxlpm.cn http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn http://www.morning.pmxw.cn.gov.cn.pmxw.cn http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.fnmtc.cn.gov.cn.fnmtc.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn http://www.morning.qjxkx.cn.gov.cn.qjxkx.cn http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.daxifa.com.gov.cn.daxifa.com http://www.morning.qglqb.cn.gov.cn.qglqb.cn http://www.morning.lhyhx.cn.gov.cn.lhyhx.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.kjyhh.cn.gov.cn.kjyhh.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn http://www.morning.trlhc.cn.gov.cn.trlhc.cn http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn