В архитектуре Модель-Представление-Контроллер (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, приведя примеры кода для каждого метода. В зависимости от ваших требований и предпочтений вы можете выбрать наиболее подходящий подход для вашего приложения. Понимая эти альтернативы, вы сможете лучше контролировать уровень доступа к данным и эффективно работать с различными системами баз данных.