65.9K
CodeProject 正在变化。 阅读更多。
Home

使用类库和 Entity Framework 简化 ASP.NET MVC WebAPI 中的数据访问

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (3投票s)

2024年6月13日

CPOL

2分钟阅读

viewsIcon

4863

使用类库和 Entity Framework 简化数据访问,无需 .edmx 文件 (ADO.NET)

引言

在现代 Web 开发中,关键挑战之一是有效管理数据访问,同时保持代码的清洁和模块化。ASP.NET MVC WebAPI 提供了一个强大的框架来构建 RESTful API,但将其与数据访问层集成有时会很复杂。然而,通过利用类库和 Entity Framework,我们可以简化此过程,使 WebAPI 项目中的数据访问高效且易于维护。

在本文中,我们将逐步介绍设置用于数据访问的类库、将其与 ASP.NET MVC WebAPI 项目集成以及创建简单的 API 控制器以从数据库中提取数据的步骤。

设置 DataAccessLayer 类库

首先,让我们在我们的解决方案中创建一个名为 DataAccessLayer 的类库项目。 在此项目中,我们将使用 Entity Framework 定义我们的数据访问逻辑,而无需使用 .edmx 文件 (ADO.NET)

  • DatabaseTransections 类

DataAccessLayer 项目中,我们将创建一个名为 DatabaseTransections 的类,继承自 DbContext。 此类将包含使用 Entity Framework 从数据库中提取数据的方法。 通过将数据库交互封装在此类中,我们可以提高代码的可重用性和可维护性。

public class DatabaseTransections : DbContext
{
    public DatabaseTransections() : base("name=ConStr") { }
    public virtual DbSet<ProductEntity> Product { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ProductEntity>().ToTable("tblProduct");
    }
}
  • ProductEntity 和 ProductRepository 类

接下来,我们将定义我们的实体类 ProductEntity,以表示数据库中产品的​​数据模型。 此外,我们将创建一个 ProductRepository 类来处理产品的 CRUD 操作,抽象数据库特定的逻辑。

public class ProductEntity
{
    public int ID { get; set; }
    public int ProductCategory { get; set; }
    public string ProductName { get; set; }
    public int UnitPrice { get; set; }
    public int Quantity { get; set; }
}

public class ProductRepository
{
    private readonly DatabaseTransections transection;
    public ProductRepository(DatabaseTransections _transection) 
    { 
       transection = _transection; 
     }
     public List<ProductEntity> GetALLProducts(int? _productCategory)
     {
        try
        {
            return transection.Product.Where(m => m.ProductCategory == _productCategory).ToList();
         }
         catch (Exception ex)
         {
            return null;
         }
     }
}

与 WebAPI 项目集成

现在,让我们在我们的解决方案中创建一个名为 APILearningASP.NET MVC WebAPI 项目。 我们将添加一个名为 ProductController 的 WebAPI 控制器,以公开用于提取产品数据​​的端点。 我们将添加 DataAccessLayer 解决方案引用以访问 WebAPI 控制器中的 ProductRepository 类。

  • ProductController

实现映射到 HTTP 动词(GET、POST、PUT、DELETE)的控制器操作(方法)以处理 API 请求。 这些操作将与 ProductRepository 交互以对产品数据执行 CRUD(创建、读取、更新、删除)操作。

public class ProductController : ApiController
{
    // GET api/product
    public IEnumerable<ProductEntity> Get()
    {
        return new ProductRepository(new DatabaseTransections()).GetALLProducts(null);
    }
  //Implement POST, PUT, DELETE methods by using ProductRepository
}

这种方法的优点

  • 关注点分离:数据访问逻辑封装在 DataAccessLayer 类库中,从而提高了可维护性和可重用性。
  • 可测试性:使用依赖注入可以更容易地对控制器和存储库进行单元测试。
  • 灵活性:数据访问层可以轻松扩展以支持其他实体和数据操作。

结论

通过将我们的项目组织成用于数据访问和 API 逻辑的单独类库,我们促进了关注点分离和可维护性。 利用 Entity Framework 简化了数据库交互,使我们能够专注于构建强大的 API,而无需担心底层数据库操作。

总之,通过遵循本文中概述的步骤,开发人员可以简化 ASP.NET MVC WebAPI 项目中的数据访问,从而在长期内使其更具可扩展性和可维护性。

© . All rights reserved.