以下是一个示例,演示了如何在ASP.NET中使用DAO而不是Entity Framework来创建REST API。
首先,我们需要定义一个数据访问对象(DAO)类,该类将负责与数据库进行交互。在这个例子中,我们将使用ADO.NET来执行数据库操作。
public class ProductDAO
{
private string connectionString;
public ProductDAO(string connectionString)
{
this.connectionString = connectionString;
}
public List GetAllProducts()
{
List products = new List();
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM Products";
SqlCommand command = new SqlCommand(query, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Product product = new Product();
product.Id = reader.GetInt32(0);
product.Name = reader.GetString(1);
product.Price = reader.GetDecimal(2);
products.Add(product);
}
reader.Close();
}
return products;
}
public Product GetProductById(int id)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT * FROM Products WHERE Id = @Id";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", id);
SqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
Product product = new Product();
product.Id = reader.GetInt32(0);
product.Name = reader.GetString(1);
product.Price = reader.GetDecimal(2);
reader.Close();
return product;
}
}
return null;
}
public void AddProduct(Product product)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Name", product.Name);
command.Parameters.AddWithValue("@Price", product.Price);
command.ExecuteNonQuery();
}
}
public void UpdateProduct(Product product)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "UPDATE Products SET Name = @Name, Price = @Price WHERE Id = @Id";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Name", product.Name);
command.Parameters.AddWithValue("@Price", product.Price);
command.Parameters.AddWithValue("@Id", product.Id);
command.ExecuteNonQuery();
}
}
public void DeleteProduct(int id)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "DELETE FROM Products WHERE Id = @Id";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery();
}
}
}
接下来,我们需要创建一个控制器类来处理REST API的请求。
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
private ProductDAO productDAO;
public ProductsController(IConfiguration configuration)
{
string connectionString = configuration.GetConnectionString("DefaultConnection");
productDAO = new ProductDAO(connectionString);
}
[HttpGet]
public ActionResult> Get()
{
List products = productDAO.GetAllProducts();
return products;
}
[HttpGet("{id}")]
public ActionResult Get(int id)
{
Product product = productDAO.GetProductById(id);
if (product == null)
{
return NotFound();
}
return product;
}
[HttpPost]
public ActionResult Post(Product product)
{
productDAO.AddProduct(product);
return Ok();
}
[HttpPut("{id}")]
public ActionResult Put(int id, Product product)
{
if (id != product.Id)
{
return BadRequest();
}
productDAO.UpdateProduct(product);
return Ok();
}
[HttpDelete("{id}")]
public ActionResult Delete(int id)
{
productDAO.DeleteProduct(id);
return Ok();
}
}
最后,我们需要将依赖项注入到Startup.cs文件中。
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient(_ => Configuration);
services.AddControllers();
// 添加数据库连接字符串
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// 注册ProductDAO
services.AddScoped();
// 其他配置...
}
这是一个简单的示例,演示了如何在ASP.NET中使用DAO而不是