ASP.NET C#(非MVC)下Entity Framework增删改操作求助与示例需求
ASP.NET Web Forms + Entity Framework CRUD 示例(非MVC)
针对你遇到的问题,我结合你提供的代码片段,整理了完整的INSERT、UPDATE、DELETE操作示例,都是Web Forms环境下的实用写法:
1. INSERT(新增设备)
你的代码片段可能漏了几个关键步骤,比如Cookie空值判断、日期转换异常处理,以及最核心的SaveChanges()调用,完整代码如下:
// 先检查登录Cookie是否存在,避免空引用报错 if (Request.Cookies["NguoiDung"] != null) { var maso = Request.Cookies["NguoiDung"].Value; DateTime ngayVe; // 安全转换日期,避免格式错误导致崩溃 if (!DateTime.TryParse(txtNgayVe.Text, out ngayVe)) { // 这里可以给用户提示,比如 Label_Msg.Text = "日期格式不正确,请重新输入"; return; } using (CalibraMainEntities dv = new CalibraMainEntities()) { Device dev = new Device(); // 赋值页面输入的字段 dev.KMH = txtKMH.Text; dev.Name_TB = txtNameTB.Text; dev.Model = txtModel.Text; dev.Serial = txtSerial.Text; dev.Date_Entry = ngayVe; dev.Main_Place = txtMainPlace.Text; dev.Calibra_Place = txtCalibraPlace.Text; // 补全你未写完的代码 // 假设你有"创建人"字段,把Cookie里的用户ID赋值进去 dev.Created_By = maso; // 将实体添加到EF上下文 dv.Devices.Add(dev); // 提交更改到数据库 int rowsAffected = dv.SaveChanges(); if (rowsAffected > 0) { // 新增成功,可跳转列表页或提示用户 // Response.Redirect("DeviceList.aspx"); } else { // 新增失败的处理逻辑 } } } else { // Cookie不存在,提示用户先登录 }
2. UPDATE(修改设备)
修改需要先从数据库查询到目标实体,修改属性后再提交更改:
// 假设你有一个输入设备ID的控件,比如txtDeviceID.Text if (!string.IsNullOrEmpty(txtDeviceID.Text) && int.TryParse(txtDeviceID.Text, out int deviceId)) { DateTime ngayVe; if (!DateTime.TryParse(txtNgayVe.Text, out ngayVe)) { // 日期格式错误提示 return; } using (CalibraMainEntities dv = new CalibraMainEntities()) { // 查询要修改的设备 Device devToUpdate = dv.Devices.FirstOrDefault(d => d.DeviceID == deviceId); if (devToUpdate != null) { // 更新实体属性 devToUpdate.KMH = txtKMH.Text; devToUpdate.Name_TB = txtNameTB.Text; devToUpdate.Model = txtModel.Text; devToUpdate.Serial = txtSerial.Text; devToUpdate.Date_Entry = ngayVe; devToUpdate.Main_Place = txtMainPlace.Text; devToUpdate.Calibra_Place = txtCalibraPlace.Text; // 如果有"修改人"字段,也可赋值 // devToUpdate.Updated_By = maso; // 提交更改 int rowsAffected = dv.SaveChanges(); if (rowsAffected > 0) { // 修改成功提示 } } else { // 未找到对应设备,提示用户 } } } else { // 设备ID格式错误提示 }
3. DELETE(删除设备)
删除有两种常用方式,按需选择:
if (!string.IsNullOrEmpty(txtDeviceID.Text) && int.TryParse(txtDeviceID.Text, out int deviceId)) { using (CalibraMainEntities dv = new CalibraMainEntities()) { // 方式1:先查询实体再删除(适合需要验证权限/关联数据的场景) Device devToDelete = dv.Devices.FirstOrDefault(d => d.DeviceID == deviceId); if (devToDelete != null) { dv.Devices.Remove(devToDelete); int rowsAffected = dv.SaveChanges(); if (rowsAffected > 0) { // 删除成功提示 } } // 方式2:直接Attach虚拟实体删除(适合已知ID、无需额外验证的场景,性能更高) // Device devToDelete = new Device { DeviceID = deviceId }; // dv.Devices.Attach(devToDelete); // dv.Devices.Remove(devToDelete); // dv.SaveChanges(); } }
常见问题排查
- 连接字符串配置:确保Web.config里的
CalibraMainEntities连接字符串正确指向你的数据库 - 日期转换异常:推荐用
DateTime.TryParseExact指定固定格式(比如"dd/MM/yyyy"),避免因系统区域设置导致转换失败 - 空值验证:给页面输入控件添加
RequiredFieldValidator,或者后台判断输入是否为空,避免数据库字段空值报错 - DbContext生命周期:始终用
using包裹DbContext,确保资源及时释放,避免内存泄漏
内容的提问来源于stack exchange,提问作者Mr Trung




