You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:27:35