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






4.88/5 (3投票s)
使用类库和 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 项目集成
现在,让我们在我们的解决方案中创建一个名为 APILearning 的 ASP.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 项目中的数据访问,从而在长期内使其更具可扩展性和可维护性。