You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动