• EF 6 新特性七


    介绍

    接下来我将给大家重点介绍一下.Net 6 之后的一些新的变更,文章都是来自于外国大佬的文章,我这边进行一个翻译,并加上一些自己的理解和解释。

    源作者链接:https://blog.okyrylchuk.dev/entity-framework-core-6-features-part-3

    正文

    SQLite 支持 DateOnly 和 TimeOnly

    SQLite 提供程序在 EF Core 6.0 中支持新的DateOnly和TimeOnly类型。它将它们存储为TEXT。

    using var context = new ExampleContext();
    
    var query1 = context.People
        .Where(p => p.Birthday < new DateOnly(2000, 1, 1))
        .ToQueryString();
    
    Console.WriteLine(query1);
    // SELECT "p"."Id", "p"."Birthday", "p"."Name"
    // FROM "People" AS "p"
    // WHERE "p"."Birthday" < '2000-01-01'
    
    var query2 = context.Notifications
        .Where(n => n.AllowedFrom >= new TimeOnly(8, 0) && n.AllowedTo <= new TimeOnly(16, 0))
        .ToQueryString();
    
    Console.WriteLine(query2);
    // SELECT "n"."Id", "n"."AllowedFrom", "n"."AllowedTo"
    // FROM "Notifications" AS "n"
    // WHERE("n"."AllowedFrom" >= '08:00:00') AND("n"."AllowedTo" <= '16:00:00')
    
    class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateOnly Birthday { get; set; }
    }
    class Notification
    {
        public int Id { get; set; }
        public TimeOnly AllowedFrom { get; set; }
        public TimeOnly AllowedTo { get; set; }
    }
    class ExampleContext : DbContext
    {
        public DbSet<Person> People { get; set; }
        public DbSet<Notification> Notifications { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlite(@"Data Source=Db\DateOnlyTimeOnly.db");
    }
    
    

    SQLite 连接是池化的

    SQLite 数据库是一个文件。因此,大多数情况下创建连接速度很快。但是,打开与加密数据库的连接可能会非常慢。因此,SQLite 连接现在像 EF Core 6 中的其他数据库提供程序一样被池化。

    class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class ExampleContext : DbContext
    {
        public DbSet<Person> People { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlite("Data Source=EncryptedDb.db;Mode=ReadWriteCreate;Password=password");
    }
    
    

    SQLite 中的命令超时

    在 EF Core 6 for SQLite 中,已将命令超时添加到连接字符串。SQLite 将Default Timeout视为Command Timeout的同义词,如果愿意,可以使用它来代替。

    class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class ExampleContext : DbContext
    {
        public DbSet<Person> People { get; set; }
    
        // 60 seconds as the default timeout for commands created by connection
        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlite("Data Source=Test.db;Command Timeout=60");
    }
    
    

    结语

    联系作者:加群:867095512 @MrChuJiu

    公众号

  • 相关阅读:
    Sublime Text 3 快捷键汇总
    jquery远程引用地址大全
    我的网站以后要如何设计
    word中特殊符号的替换
    如何有效地提升JavaScript 水平?
    HTML5坦克大战(2)绘制坦克复习
    JavaScript中的对象冒充
    让年轻程序员少走弯路的14个忠告
    ASCII
    可以用旋转法绘制平行四边形
  • 原文地址:https://www.cnblogs.com/MrChuJiu/p/15868132.html
Copyright © 2020-2023  润新知