如何在ASP.NET MVC中不使用Entity Framework,改用SQL查询实现CRUD操作?
没问题,我来帮你把教程里的Entity Framework操作替换成直接的SQL查询实现,完全不用EF,下面分增删改查四个部分来拆解,都是ASP.NET MVC里用ADO.NET的标准写法:
替换Entity Framework操作为直接SQL查询
1. 删除操作(对应你给出的示例)
先贴出原来的EF代码做对比:
原Entity Framework删除代码:
var v = dc.Events.Where(a => a.EventID == eventID).FirstOrDefault(); if (v != null) { dc.Events.Remove(v); dc.SaveChanges(); status = true; }
替换为直接执行SQL的ADO.NET代码(一定要用参数化查询,避免SQL注入!):
bool status = false; // 从Web.config里获取数据库连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["YourConnectionStringName"].ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { // 参数化SQL语句,用@占位符代替直接拼接 string sql = "DELETE FROM Events WHERE EventID = @EventID"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { // 添加参数,自动处理类型和转义 cmd.Parameters.AddWithValue("@EventID", eventID); conn.Open(); // 执行删除,返回受影响的行数 int rowsAffected = cmd.ExecuteNonQuery(); // 有行数受影响说明删除成功 status = rowsAffected > 0; } }
2. 查询操作(获取日历事件列表)
原教程里用EF获取事件列表的代码大概是var events = dc.Events.ToList();,替换为直接查询SQL的代码:
// 假设你有一个EventModel类来映射数据库字段 List<EventModel> events = new List<EventModel>(); string connectionString = ConfigurationManager.ConnectionStrings["YourConnectionStringName"].ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { string sql = "SELECT EventID, Title, Start, [End], IsAllDay FROM Events"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { conn.Open(); // 使用DataReader读取查询结果 using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { events.Add(new EventModel { EventID = Convert.ToInt32(reader["EventID"]), Title = reader["Title"].ToString(), Start = reader["Start"].ToString(), // 处理可能为null的字段 End = reader["End"] != DBNull.Value ? reader["End"].ToString() : null, IsAllDay = Convert.ToBoolean(reader["IsAllDay"]) }); } } } } // 之后把events集合返回给前端FullCalendar即可
3. 新增操作
原EF新增事件的代码类似下面这样,我们替换为SQL插入:
原Entity Framework新增代码:
dc.Events.Add(new Event { Title = title, Start = start, End = end, IsAllDay = isAllDay }); dc.SaveChanges();
替换为:
bool status = false; string connectionString = ConfigurationManager.ConnectionStrings["YourConnectionStringName"].ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { string sql = @"INSERT INTO Events (Title, Start, [End], IsAllDay) VALUES (@Title, @Start, @End, @IsAllDay)"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@Title", title); cmd.Parameters.AddWithValue("@Start", start); cmd.Parameters.AddWithValue("@End", end); cmd.Parameters.AddWithValue("@IsAllDay", isAllDay); conn.Open(); int rowsAffected = cmd.ExecuteNonQuery(); status = rowsAffected > 0; } }
4. 更新操作
原EF更新事件的代码大概是这样,我们替换为SQL更新:
原Entity Framework更新代码:
var eventToUpdate = dc.Events.FirstOrDefault(a => a.EventID == eventID); if (eventToUpdate != null) { eventToUpdate.Title = newTitle; eventToUpdate.Start = newStart; eventToUpdate.End = newEnd; eventToUpdate.IsAllDay = newIsAllDay; dc.SaveChanges(); status = true; }
替换为:
bool status = false; string connectionString = ConfigurationManager.ConnectionStrings["YourConnectionStringName"].ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { string sql = @"UPDATE Events SET Title = @Title, Start = @Start, [End] = @End, IsAllDay = @IsAllDay WHERE EventID = @EventID"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@EventID", eventID); cmd.Parameters.AddWithValue("@Title", newTitle); cmd.Parameters.AddWithValue("@Start", newStart); cmd.Parameters.AddWithValue("@End", newEnd); cmd.Parameters.AddWithValue("@IsAllDay", newIsAllDay); conn.Open(); int rowsAffected = cmd.ExecuteNonQuery(); status = rowsAffected > 0; } }
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

