一. 新功能(变化)

前置

 参考官方文档:https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-5.0/whatsnew
                            https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-5.0/breaking-changes
 映射实体:Scaffold-DbContext "Server=.;Database=EFDB01;User ID=sa;Password=123456;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -UseDatabaseNames -DataAnnotations -NoPluralize

1. 直接将查询语句输出到控制台

 在OnConfiguring中直接配置 optionsBuilder.LogTo(Console.WriteLine); 详见CoreConsole

PS:有点鸡肋,不如之前写法好用。

       protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.LogTo(Console.WriteLine);
        }

2. 灵活的实体映射

 实体类型通常映射到表或视图,以便 EF Core 在查询该类型时将拉回表或视图的内容。 EF Core 5.0 添加了其他映射选项, 其中可将实体映射到 SQL 查询(称为“定义查询”)或表值函数 (TVF):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Post>().ToSqlQuery(
        @"SELECT Id, Name, Category, BlogId FROM posts
          UNION ALL
          SELECT Id, Name, ""Legacy"", BlogId from legacy_posts");
    modelBuilder.Entity<Blog>().ToFunction("BlogsReturningFunction");
}
--------
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().ToTable("Blogs").ToView("BlogsView");
}

3. DbContextFactory 和 PooledDbContextFactory

 EF Core 5.0 引入了 AddDbContextFactory 和 AddPooledDbContextFactory 来注册工厂,以便在应用程序的依赖项注入 (D.I.) 容器中创建 DbContext 实例;

注:当应用程序代码需要手动创建和处理上下文实例时,这很有用。

代码分享:

   public void ConfigureServices(IServiceCollection services)
        {
            //工厂注入
            services.AddDbContextFactory<EFDB01Context>(b => b.UseSqlServer(Configuration.GetConnectionString("EFStr")));
            //services.AddPooledDbContextFactory<EFDB01Context>(b => b.UseSqlServer(Configuration.GetConnectionString("EFStr")));

            services.AddControllersWithViews();
        }

使用:

 /// <summary>
    /// 测试 DbContextFactory 注入,然后手动创建上下文实例
    /// </summary>
    public class Test1Controller : Controller
    {
        private readonly IDbContextFactory<EFDB01Context> _contextFactory;

        public Test1Controller(IDbContextFactory<EFDB01Context> contextFactory)
            => _contextFactory = contextFactory;


        public IActionResult Index()
        {
            using (var context = _contextFactory.CreateDbContext())
            {
                var data = context.T_UserInfor.ToList();
            }



            return View();
        }
    }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
  • 2022-01-09
  • 2022-12-23
  • 2021-09-16
猜你喜欢
  • 2021-12-05
  • 2021-11-28
  • 2022-01-30
  • 2021-12-12
  • 2021-11-18
  • 2021-11-28
相关资源
相似解决方案