• Entity Framework Core入门(看不懂,不掌握)


    将创建一个 .NET Core 控制台应用,该应用使用 Entity Framework Core 对 SQLite 数据库执行数据访问。

     

    先决条件

    .NET Core SDK

    Visual Studio 2019版本16.3或更高版本

    .NET Core跨平台开发

    .NET 6.0运行时(LTS)和.NET Core 3.1运行时(LTS)

    创建新项目

    打开 Visual Studio

    单击“创建新项目”

     

    选择带有 C# 标记的“控制台应用 (.NET Core)” ,然后单击“下一步”

     

     

    输入“EFGetStarted”作为名称,然后单击“创建”

     

    安装EntityFramework Core

    要安装 EF Core,请为要作为目标对象的 EF Core 数据库提供程序安装程序包。 本教程使用 SQLite 的原因是,它可在 .NET Core 支持的所有平台上运行。

    “工具”>“NuGet 包管理器”>“包管理器控制台”。

     运行以下命令:

    Install-Package Microsoft.EntityFrameworkCore.Sqlite

    提示:还可以通过右键单击项目并选择“管理 NuGet 程序包”来安装包。

     

    1. 每个包都由其所有者许可给你。NuGet 不负责第三方包,也不授予其许可证。一些包可能包括受其他许可证约束的依赖关系。单击包源(源) URL 可确定任何依赖关系。
    2. 程序包管理器控制台主机版本 6.3.0.131
    3. 键入 "get-help NuGet" 可查看所有可用的 NuGet 命令。
    4. PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite
    5. 正在还原 C:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\C#\EFGetStarted\EFGetStarted\EFGetStarted.csproj 的包...
    6. GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/index.json
    7. OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/index.json 284 毫秒
    8. GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/6.0.8/microsoft.entityframeworkcore.sqlite.6.0.8.nupkg
    9. OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/6.0.8/microsoft.entityframeworkcore.sqlite.6.0.8.nupkg 67 毫秒
    10. 已通过内容哈希 SCDjo2xtsL/7h1ugbHR7kOrSsBNcoGvyeuyfAIQ1yWJh5pRYOj/EOV8vTkzXY6LylnbL+hH1+ZPlV3e1cakiuw== 从 https://api.nuget.org/v3/index.json 安装 Microsoft.EntityFrameworkCore.Sqlite 6.0.8 。
    11. Install-Package : NU1202: 包 Microsoft.EntityFrameworkCore.Sqlite 6.0.8 与 netcoreapp3.1 (.NETCoreApp,Version=v3.1) 不兼容。 包 Microsoft.EntityFrameworkCore.Sql
    12. ite 6.0.8 支持: net6.0 (.NETCoreApp,Version=v6.0)
    13. 所在位置 行:1 字符: 1
    14. + Install-Package Microsoft.EntityFrameworkCore.Sqlite
    15. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    16. + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
    17. + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    18. Install-Package : 程序包还原失败。正在回滚“EFGetStarted”的程序包更改。
    19. 所在位置 行:1 字符: 1
    20. + Install-Package Microsoft.EntityFrameworkCore.Sqlite
    21. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    22. + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
    23. + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    24. 已用时间: 00:00:06.1956456
    25. PM>

     

    创建模型

    定义构成模型的上下文类和实体类。

    右键单击项目,然后选择“添加”>“类”

     

    输入“Model.cs”作为名称,然后单击“添加”

    将此文件的内容替换为以下代码

    1. using Microsoft.EntityFrameworkCore;
    2. using System;
    3. using System.Collections.Generic;
    4. public class BloggingContext : DbContext
    5. {
    6. public DbSet Blogs { get; set; }
    7. public DbSet Posts { get; set; }
    8. public string DbPath { get; }
    9. public BloggingContext()
    10. {
    11. var folder = Environment.SpecialFolder.LocalApplicationData;
    12. var path = Environment.GetFolderPath(folder);
    13. DbPath = System.IO.Path.Join(path, "blogging.db");
    14. }
    15. // The following configures EF to create a Sqlite database file in the
    16. // special "local" folder for your platform.
    17. protected override void OnConfiguring(DbContextOptionsBuilder options)
    18. => options.UseSqlite($"Data Source={DbPath}");
    19. }
    20. public class Blog
    21. {
    22. public int BlogId { get; set; }
    23. public string Url { get; set; }
    24. public List Posts { get; } = new();
    25. }
    26. public class Post
    27. {
    28. public int PostId { get; set; }
    29. public string Title { get; set; }
    30. public string Content { get; set; }
    31. public int BlogId { get; set; }
    32. public Blog Blog { get; set; }
    33. }

     

    创建数据库

    使用迁移创建数据库。

    在“包管理器控制台(PMC)”中,运行以下命令

    1. Install-Package Microsoft.EntityFrameworkCore.Tools
    2. Add-Migration InitialCreate
    3. Update-Database

    这会安装 EF Core 的 PMC 工具。 Add-Migration 命令为迁移搭建基架,以便为模型创建一组初始表。 Update-Database 命令创建数据库并向其应用新的迁移。

    1. PM> Install-Package Microsoft.EntityFrameworkCore.Tools
    2. 正在还原 C:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\C#\EFGetStarted\EFGetStarted\EFGetStarted.csproj 的包...
    3. GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/index.json
    4. OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/index.json 507 毫秒
    5. GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/6.0.8/microsoft.entityframeworkcore.tools.6.0.8.nupkg
    6. OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/6.0.8/microsoft.entityframeworkcore.tools.6.0.8.nupkg 70 毫秒
    7. 已通过内容哈希 +wjKy16Vdz/ArHFvJZ1xXG241OZMFbTY0lS8vTQL4tfo8slX/h1J9PkzbWJjG6G7SMharUwvigIo+vrMO628Xg== 从 https://api.nuget.org/v3/index.json 安装 Microsoft.EntityFrameworkCore.Tools 6.0.8 。
    8. Install-Package : NU1202: 包 Microsoft.EntityFrameworkCore.Tools 6.0.8 与 netcoreapp3.1 (.NETCoreApp,Version=v3.1) 不兼容。 包 Microsoft.EntityFrameworkCore.Tool
    9. s 6.0.8 支持: net6.0 (.NETCoreApp,Version=v6.0)
    10. 所在位置 行:1 字符: 1
    11. + Install-Package Microsoft.EntityFrameworkCore.Tools
    12. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    13. + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
    14. + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    15. Install-Package : 程序包还原失败。正在回滚“EFGetStarted”的程序包更改。
    16. 所在位置 行:1 字符: 1
    17. + Install-Package Microsoft.EntityFrameworkCore.Tools
    18. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    19. + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
    20. + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
    21. 已用时间: 00:00:05.5803966
    22. PM> Add-Migration InitialCreate
    23. Add-Migration : 无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
    24. 所在位置 行:1 字符: 1
    25. + Add-Migration InitialCreate
    26. + ~~~~~~~~~~~~~
    27. + CategoryInfo : ObjectNotFound: (Add-Migration:String) [], CommandNotFoundException
    28. + FullyQualifiedErrorId : CommandNotFoundException
    29. PM> Update-Database
    30. Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
    31. 所在位置 行:1 字符: 1
    32. + Update-Database
    33. + ~~~~~~~~~~~~~~~
    34. + CategoryInfo : ObjectNotFound: (Update-Database:String) [], CommandNotFoundException
    35. + FullyQualifiedErrorId : CommandNotFoundException
    36. PM>

     

    创建、读取、更新和删除

    打开 Program.cs 并将内容替换为以下代码:

    1. using System;
    2. using System.Linq;
    3. using var db = new BloggingContext();
    4. // Note: This sample requires the database to be created before running.
    5. Console.WriteLine($"Database path: {db.DbPath}.");
    6. // Create
    7. Console.WriteLine("Inserting a new blog");
    8. db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
    9. db.SaveChanges();
    10. // Read
    11. Console.WriteLine("Querying for a blog");
    12. var blog = db.Blogs
    13. .OrderBy(b => b.BlogId)
    14. .First();
    15. // Update
    16. Console.WriteLine("Updating the blog and adding a post");
    17. blog.Url = "https://devblogs.microsoft.com/dotnet";
    18. blog.Posts.Add(
    19. new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
    20. db.SaveChanges();
    21. // Delete
    22. Console.WriteLine("Delete the blog");
    23. db.Remove(blog);
    24. db.SaveChanges();

    运行应用

    “调试”>“开始执行(不调试)”

     

     

  • 相关阅读:
    HttpServletRequest详解
    基于微信小程序的校园外卖点餐系统
    C#实现Windows服务安装卸载开启停止
    词向量模型Word2Vec
    数据分析 - 分散性与变异的量度
    Linux系统编程函数介绍
    干货分享|使用 Istio 实现灰度发布
    centos 搭建 zookeeper 高可用集群
    UniApp项目实践HelloUni继续快速小步快跑中,前面是大上海吗
    不要动 WindowsApps 文件夹的权限以及更新 win10 版本
  • 原文地址:https://blog.csdn.net/DXB2021/article/details/126341195