ASP.NET MVCWebAPI为构建RESTful API提供了一个强大的框架,但有时将其与数据访问层集成可能会变得复杂。然而,通过利用类库和Entity Framework,可以简化这一过程,使WebAPI项目中的数据访问变得高效且易于维护。
首先,让在解决方案中创建一个名为DataAccessLayer的类库项目。在这个项目中,将使用Entity Framework定义数据访问逻辑,而不需要.edmx文件(ADO.NET)。
在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类来处理产品的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;
}
}
}
现在,让创建一个名为APILearning的ASP.NET MVCWebAPI项目。将添加一个名为ProductController的WebAPI控制器,以公开获取产品数据的端点。将添加DataAccessLayer解决方案引用,以便在WebAPI控制器中访问ProductRepository类。
实现控制器操作(方法),这些方法映射到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);
}
// 实现POST, PUT, DELETE方法,使用ProductRepository
}
分离关注点:数据访问逻辑被封装在DataAccessLayer类库中,促进了可维护性和可重用性。
可测试性:依赖注入的使用允许更容易地对控制器和存储库进行单元测试。
灵活性:数据访问层可以轻松扩展,以支持额外的实体和数据操作。