Выполнение операций CRUD в MVC без Entity Framework: подробное руководство

В архитектуре Модель-Представление-Контроллер (MVC) Entity Framework является популярным выбором для выполнения операций CRUD (создание, чтение, обновление, удаление) в базе данных. Однако существуют сценарии, в которых вам может потребоваться работать без Entity Framework, например, когда вам нужен больший контроль над уровнем доступа к данным или когда вы работаете с устаревшей системой баз данных, которая не поддерживает Entity Framework. В этой статье мы рассмотрим несколько методов выполнения операций CRUD в MVC без использования Entity Framework. Для лучшего понимания каждый метод будет сопровождаться примером кода.

Метод 1: обычный ADO.NET
Использование простого ADO.NET — это низкоуровневый подход, при котором вы напрямую взаимодействуете с базой данных с помощью SqlConnection, SqlCommand и других классов ADO.NET. Вот пример выполнения операций CRUD с использованием обычного ADO.NET:

// Create
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string insertQuery = "INSERT INTO TableName (Column1, Column2) VALUES (@Value1, @Value2)";
    SqlCommand command = new SqlCommand(insertQuery, connection);
    command.Parameters.AddWithValue("@Value1", value1);
    command.Parameters.AddWithValue("@Value2", value2);
    command.ExecuteNonQuery();
    connection.Close();
}
// Read
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string selectQuery = "SELECT * FROM TableName";
    SqlCommand command = new SqlCommand(selectQuery, connection);
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        // Read and process data
    }
    reader.Close();
    connection.Close();
}
// Update
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string updateQuery = "UPDATE TableName SET Column1 = @Value1 WHERE Column2 = @Value2";
    SqlCommand command = new SqlCommand(updateQuery, connection);
    command.Parameters.AddWithValue("@Value1", newValue1);
    command.Parameters.AddWithValue("@Value2", value2);
    command.ExecuteNonQuery();
    connection.Close();
}
// Delete
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string deleteQuery = "DELETE FROM TableName WHERE Column1 = @Value1";
    SqlCommand command = new SqlCommand(deleteQuery, connection);
    command.Parameters.AddWithValue("@Value1", value1);
    command.ExecuteNonQuery();
    connection.Close();
}

Метод 2: Dapper
Dapper — это облегченный микро-ORM (объектно-реляционное сопоставление), предоставляющий простой API для сопоставления запросов к базе данных с объектами. Его можно использовать как альтернативу Entity Framework для доступа к данным. Вот пример использования Dapper для операций CRUD:

// Create
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string insertQuery = "INSERT INTO TableName (Column1, Column2) VALUES (@Value1, @Value2)";
    connection.Execute(insertQuery, new { Value1 = value1, Value2 = value2 });
    connection.Close();
}
// Read
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string selectQuery = "SELECT * FROM TableName";
    var data = connection.Query<TableName>(selectQuery).ToList();
    connection.Close();
}
// Update
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string updateQuery = "UPDATE TableName SET Column1 = @Value1 WHERE Column2 = @Value2";
    connection.Execute(updateQuery, new { Value1 = newValue1, Value2 = value2 });
    connection.Close();
}
// Delete
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string deleteQuery = "DELETE FROM TableName WHERE Column1 = @Value1";
    connection.Execute(deleteQuery, new { Value1 = value1 });
    connection.Close();
}

Метод 3: наборы данных ADO.NET
Наборы данных ADO.NET обеспечивают представление в памяти данных, полученных из базы данных. Хотя этот подход считается устаревшим, его все же можно использовать для простых операций CRUD. Вот пример:

// Create
DataTable table = new DataTable("TableName");
table.Columns.Add("Column1", typeof(string));
table.Columns.Add("Column2", typeof(int));
DataRow newRow = table.NewRow();
newRow["Column1"] = value1;
newRow["Column2"] = value2;
table.Rows.Add(newRow);
// Read
DataTable table = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string selectQuery = "SELECT * FROM TableName";
    SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, connection);
    adapter.Fill(table);
    connection.Close();
}
// Update
DataTable table = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string selectQuery = "SELECT * FROM TableName";
    SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, connection);
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
    adapter.Fill(table);
    // Modify the data in the DataTable
    adapter.Update(table);
    connection.Close();
}
// Delete
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string deleteQuery = "DELETE FROM TableName WHERE Column1 = @Value1";
    SqlCommand command = new SqlCommand(deleteQuery, connection);
    command.Parameters.AddWithValue("@Value1", value1);
    command.ExecuteNonQuery();
    connection.Close();
}

В этой статье мы рассмотрели три метода выполнения операций CRUD в MVC без использования Entity Framework. Мы обсудили использование простых наборов данных ADO.NET, Dapper и ADO.NET, приведя примеры кода для каждого метода. В зависимости от ваших требований и предпочтений вы можете выбрать наиболее подходящий подход для вашего приложения. Понимая эти альтернативы, вы сможете лучше контролировать уровень доступа к данным и эффективно работать с различными системами баз данных.