一、什么是dotnetef
Entity Framework (EF) 是一个 ORM 框架,可以将 .NET 应用程序中的对象映射到关系数据库中。Entity Framework 的核心是 Object Relational Mapping (ORM)。ORM 是一种编程技术,它将关系数据库中的数据转换为方便在应用程序中使用的对象。Entity Framework 是 .NET Framework 的一部分,它提供了一组用于执行 CRUD(Create、Read、Update、Delete)和查询操作的 API。它充分利用了 .NET 的强类型检查和代码静态分析功能。在使用 Entity Framework 时,不再需要编写复杂的 SQL 查询,而是利用强类型化的集合和实体来进行数据库操作。dotnetef是用.net core进行重构的entity framework版本,也是目前开发的主流版本。
二、为什么使用dotnetef
使用dotnetef带来的最大好处是它为开发人员提供了一种基于模型的方法,使其可以将 .NET 代码完全和底层数据库操作(例如 SQL 查询)分离。ASP.NET Core 同样内置了数据库访问支持,但这个 API 的层次结构相对 flatter – 没有分层的 Repository 和 UnitOfWork 等概念。另外一方面,dotnetef可以帮助应用程序错误控制,比如错误的SQL语句。也就是说dotnetef提供了一种非常好的抽象层,允许开发人员忽略数据库架构的细节,以更加高级和更抽象的方式工作。
三、dotnetef的常用功能
1.基本的增删改查操作
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
}
public class CustomerContext : DbContext
{
public CustomerContext(DbContextOptions options)
: base(options)
{
}
public DbSet
Customers { get; set; }
}
public class CustomerController : Controller
{
private readonly CustomerContext _context;
public CustomerController(CustomerContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
return View(await _context.Customers.ToListAsync());
}
}
2.使用LinQ,返回需要的实体
// Find all customers in London using .Where()
var query = _context.Customers.Where(c => c.City == "London");
//query can be further refined before it's turned into
//a List by using more LINQ statements
var londonCustomers = query.ToList();
3.分页查询
public async Task<IActionResult> Index(int? pageNumber)
{
var pageSize = 2;
return View(await PaginatedList<Customer>.CreateAsync(_context.Customers.AsNoTracking(),
pageNumber ?? 1, pageSize));
}
4.查询结果的缓存
public class CustomerController : Controller
{
private readonly IDistributedCache _distributedCache;
private readonly CustomerContext _context;
public CustomerController(CustomerContext context,
IDistributedCache distributedCache)
{
_context = context;
_distributedCache = distributedCache;
}
public async Task<IActionResult> GetById(int id)
{
var customer = await _distributedCache.GetAsync($"customer_{id}");
if (customer == null)
{
var customerEntity = await _context.Customers.FindAsync(id);
if (customerEntity == null)
{
return NotFound();
}
var options = new DistributedCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromMinutes(15));
await _distributedCache.SetAsync($"customer_{id}",
Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(customerEntity)), options);
return View(customerEntity);
}
return View(JsonConvert.DeserializeObject<Customer>(Encoding.UTF8.GetString(customer)));
}
}
四、小结
通过本文阅读,你可以了解到dotnetef的一些常用功能,以及使用dotnetef的好处,包括分离数据库操作、帮助错误控制、使用LinQ,缓存等操作。使用dotnetef可以大大提高Web应用程序的开发效率和性能,进一步提高Web应用程序的流量,助你的网站的流量翻倍。