首页 > 其他分享 >Microsoft Entity Framework Core 8 示例

Microsoft Entity Framework Core 8 示例

时间:2024-11-02 12:20:02浏览次数:3  
标签:Microsoft 示例 DateOnly fileName Framework new 日志 public

        微软于 2023 年 11 月发布了最新版本的 Entity Framework Core,该版本与 Entity Framework Core 7 相比有很大变化。

        要查看新增内容,请查看 Microsoft 文档EF Core 8 中的新增功能以及EF Core 8 文档中的重大变更

        每次发布 Entity Framework Core 时,微软工程师都会提供代码示例。虽然这些代码示例很棒,但它们的结构并不适合开发人员在项目中学习和使用。此外,许多代码示例可能对普通开发人员没有用。话虽如此,我还是采用了微软代码示例,并以适合普通开发人员学习的方式对代码进行了结构化。

重要的

在许多项目中,大多数项目名称表示项目的目的。

示例源码:https://download.csdn.net/download/hefeng_aspnet/89935787 

仅限日期仅限时间

        人们期待已久的是 DateOnly 和 TimeOnly 的支持。Microsoft 提供了一些示例,但同样不是开发人员学习的结构。因此,为此提供了 Microsoft NorthWind 数据库的修改版本,Orders 表最初将日期定义为 DateTime,但没有任何日期具有时间值,因此现在将它们定义为日期。

当使用EF Power Tools进行逆向工程时,日期被定义为 DateOnly,时间被定义为 TimeOnly。

部分订单模型仅显示 DateOnly。

public partial class Orders
{
    public int OrderID { get; set; }
    public DateOnly OrderDate { get; set; }
    public DateOnly RequiredDate { get; set; }
    public DateOnly ShippedDate { get; set; }
    public DateOnly DeliveredDate { get; set; } 
}

仅限时间

查看项目 TimeBetweenApp

连接和日志记录(控制台项目)

为了加强学习,包括一个用于从 appsettings.json 读取统一连接并记录到文件的类项目。

DbContext 中的示例实现,其中 ConnectionString() 读取主应用程序的 appsettings.json 作为连接字符串。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.ConfigureWithFileLoggingOnly(ConnectionString());

让我们深入了解一下 ConfigureWithFileLoggingOnly。

  1. 使用传递的连接字符串配置 SQL-Server
  2. 设置用于将日志记录到调试文件夹下的新文件,其中每天都有一个新文件夹和日志文件。
public static void ConfigureWithFileLoggingOnly(this DbContextOptionsBuilder optionsBuilder, string connectionString)
{
    optionsBuilder
        .UseSqlServer(connectionString)
        .LogTo(new DbContextToFileLogger().Log,
            new[]
            {
                DbLoggerCategory.Database.Command.Name
            },
            LogLevel.Information);
}

用于日志记录的类。 

public class DbContextToFileLogger
{
    /// <summary>
    /// Log file name
    /// </summary>
    private readonly string _fileName = 
        Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
            "LogFiles", $"{Now.Year}-{Now.Month}-{Now.Day}", 
            "EF_Log.txt");

    /// <summary>
    /// Use to override log file name and path, file must exists
    /// </summary>
    /// <param name="fileName"></param>
    public DbContextToFileLogger(string fileName)
    {
        _fileName = fileName;
    }

    /// <summary>
    /// Setup to use default file name for logging
    /// </summary>
    public DbContextToFileLogger()
    {
        var dir = Path.GetDirectoryName(_fileName);
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        if (!File.Exists(_fileName))
        {
            using (StreamWriter w = File.AppendText(_fileName)) ;
        }
    }

    /// <summary>
    /// append message to the existing stream
    /// </summary>
    /// <param name="message"></param>
    [DebuggerStepThrough]
    public void Log(string message)
    {

        if (!File.Exists(_fileName))
        {
            File.CreateText(_fileName).Close();
        }

        StreamWriter streamWriter = new(_fileName, true);

        streamWriter.WriteLine(message);

        streamWriter.WriteLine(new string('-', 40));

        streamWriter.Flush();
        streamWriter.Close();
    }
}

为了确保有一个日志文件夹,每个项目的项目文件都有以下内容来创建日志文件夹(如果不存在)。 

<Target Name="MakeMyDir" AfterTargets="Build">
    <MakeDir Directories="$(OutDir)LogFiles" />
</Target> 

ASP.NET 核心

这些项目使用依赖注入进行连接,并且没有日志记录,尽管它们已准备好通过 Program.cs 中的SeriLog设置记录到控制台。

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // Add services to the container.
        builder.Services.AddRazorPages();
        builder.Services.AddDbContextPool<ShadowContext>(options =>
            options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
        SetupLogging.Development();

基准网

几个项目都已准备好进行基准测试。BookApp 中的示例。请注意,在每个方法中,注释掉的方法与基准测试无关,但如果不进行基准测试,开发人员就可以看到执行的每个操作的输出。

[MemoryDiagnoser]
[RankColumn, 
 MinColumn, 
 MaxColumn, 
 Q1Column, 
 Q3Column, 
 AllStatisticsColumn]
[JsonExporterAttribute.Full]
[GcServer(true)]
public partial class BookOperations
{
    [Benchmark]
    public async Task GroupBy()
    {
        await using var context = new BookContext();
        var books = await context.Book.ToListAsync();

        List<IGrouping<int, Book>> results = books
            .GroupBy(book => book.Price < 10 ? 10 : (book.Price < 20 ? 20 : 30))
            .OrderBy(grouping => grouping.Key)
            .ToList();

        //GroupNoSwitchOutput(results);
    }


    [Benchmark(Baseline = true)]
    public async Task Switch()
    {
        await using var context = new BookContext();
        var books = await context.Book.ToListAsync();

        List<GroupSwitch> results = books
            .GroupBy(book => book.Price switch
            {
                <= 10 => "Cheap",
                > 10 and <= 20 => "Medium",
                _ => "Expensive"
            })
            .Select(g => new GroupSwitch(g.Key, g.ToList()))
            .OrderBy(ca => ca.Category)
            .ToList();

        //GroupWithSwitchOutput(results);
    }
}

示例源码:https://download.csdn.net/download/hefeng_aspnet/89935787  

标签:Microsoft,示例,DateOnly,fileName,Framework,new,日志,public
From: https://blog.csdn.net/hefeng_aspnet/article/details/143364936

相关文章

  • CPP学习 用栈容器解决问题示例,判断括号是否成对出现
    #include<string>#include<iostream>#include<stack>usingnamespacestd;boolisbalanced(conststring&str){intlen=str.size();stack<char>mystack;for(inti=0;i<len;i++){if(str[i]==&......
  • 低功耗4G模组:Air780E发送SMS短消息示例
    大家好,今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息:一、SMS简介SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息。移动,联通卡不需开通VOLTE可以支持短信功能。在4G网络中,短信可以在数据传输的同时进行,不会因数据业务占用网络资源而被延迟或阻塞。......
  • 【Java Web】使用JDBC操作数据库(含代码示例)
    文章目录JDBC主要组成部分访问数据库步骤数据库交互StatementPreparedStatementSQL注入攻击演示示例单查询多查询返回记录数JDBC(JavaDatabaseConnectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数据库。JDBC使得开发者能够以......
  • .NET Framework 3.5/4.0/4.5/4.6版本离线版安装包下载
    1、安装包资源下载.NETFramework各版本:链接:https://pan.quark.cn/s/c68076e7865a提取码:tiN7  2、安装教程(.NETFramework4.7为例)1)       安装包双击打开 2)       勾选我同意,点击安装 3)       安装成功,点击关闭,查看系统设置,应用......
  • i2c与从设备通讯编程示例之i2c编写程序
    对于我们ELF 1板卡来说,我们前面看到的i2c-0、i2c-1总线对应着CPU的两个i2c适配器,作为主设备,而总线上挂载的设备作为从设备。如/dev/i2c-1对应的适配器作主设备,其上面挂载的光线传感器就作为从设备。前面我们了解了i2c的通讯协议,也初步用i2c-tools尝试着读写了一个从设备寄存......
  • 绝地求生PUBG吃鸡崩溃闪退缺少net framework 3.5安装不成功错误代码0x80070422怎么解
              浏览器地址栏输入www.dnz9.com远程解决电脑问题玩绝地求生PUBG时,如果遇到游戏崩溃闪退,显示缺少.netframework3.5.并且安装不成功,出现错误代码0x80070422,无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。不要慌张,这其实是系统组......
  • nltest 是一个 Windows 命令行工具,用于测试和管理 Windows 域的信任和连接状态。以下
    Nltest|MicrosoftLearnnltest是一个Windows命令行工具,用于测试和管理Windows域的信任和连接状态。以下是一些常用的nltest命令示例:1.查询域信任关系bashCopyCodenltest/domain_trusts该命令显示当前计算机与其域和其他信任域之间的信任关系。2.验证域控制器b......
  • 自动化滑动极验v3示例
    importrandomimportddddocrfromplaywright.sync_apiimportsync_playwrightimporttimeimportrequestswithsync_playwright()asp:det=ddddocr.DdddOcr(det=False,ocr=False)browser=p.chromium.launch(headless=False,args=['-......
  • 如何用pbootcmsAPI接口开发微信小程序UNIAPP示例
    1.准备工作在开始开发小程序之前,你需要:搭建好PbootCMS环境,确保其正常运行。注册小程序并获取AppID和AppSecret。配置PbootCMS与小程序的接口。2.封装API//获取站点信息exportconstpostSite=(config={})=>http.post('/cms/site',config)//获取自定义标签ex......
  • uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程
    前言Vue版本,请访问这篇文章。在uni-appH5网站平台开发中,详解微信公众号网页接入微信授权登录示例代码,附带申请测试公众号全流程及配置教程,提供前端h5页面公众号网页实现授权登陆并获取用户昵称头像数据的示例源码,用自己项目跑出来的本地局域网IP段就可以拉起公众......