您的位置:

用dotnetef让你的网站的流量翻倍

一、什么是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应用程序的流量,助你的网站的流量翻倍。