codecamp

使用新数据库在 ASP.NET Core 上开始使用 EF Core

在本教程中,你将使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序。 该教程使用迁移基于此数据模型创建数据库。

你可在 Windows 上使用 Visual Studio 2017,或在 Windows、macOS 或 Linux 上使用 .NET Core CLI 来学习本教程。

在 GitHub 上查看此文章的示例:

系统必备

安装以下软件:

创建新项目

  • 打开 Visual Studio 2017
  • “文件”>“新建”>“项目”
  • 从左菜单中选择“已安装”>“Visual C#”>“.NET Core”。
  • 选择“ASP.NET Core Web 应用程序”。
  • 输入“EFGetStarted.AspNetCore.NewDb”作为名称,然后单击“确定”。
  • 在“新建 ASP.NET Core Web 应用程序”对话框中:
    • 确保在下拉列表中选择“.NET Core”和“ASP.NET Core 2.1”
    • 选择“Web 应用程序(模型视图控制器)”项目模板
    • 确保将“身份验证”设置为“无身份验证”
    • 单击“确定”

警告:如果你使用“单独用户帐户”(而不是“无”)进行身份验证,Entity Framework Core 模型会添加到 Models\IdentityModel.cs 中的项目。 使用在本教程中学习的技巧,可以选择添加第二个模型,或者扩展此现有模型以包含实体类。

安装 Entity Framework Core

要安装 EF Core,请为要作为目标对象的 EF Core 数据库提供程序安装程序包。 有关可用提供程序的列表,请参阅数据库提供程序

对于本教程,无需安装提供程序包,因为本教程使用 SQL Server。 SQL Server 提供程序包包含在 Microsoft.AspnetCore.App 元包中。

创建模型

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

  • 右键单击“Models”文件夹,然后选择“添加”>“类”。

  • 输入“Model.cs”作为名称,然后单击“确定”。

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

    C#
    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    
    namespace EFGetStarted.AspNetCore.NewDb.Models
    {
        public class BloggingContext : DbContext
        {
            public BloggingContext(DbContextOptions<BloggingContext> options)
                : base(options)
            { }
    
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public ICollection<Post> Posts { get; set; }
        }
    
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    

生产应用通常会将每个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。

使用依赖注入注册上下文

若要使 BloggingContext 可用于 MVC 控制器,请在 Startup.cs 中将其注册为服务。

在应用程序启动过程中,通过依赖关系注入 注册服务(如 BloggingContext),以便能够通过构造函数的参数和属性向使用服务的组件(如 MVC 控制器)自动提供该服务。

  • 在 Startup.cs 中,添加以下 using 语句:

    C#
    using EFGetStarted.AspNetCore.NewDb.Models;
    using Microsoft.EntityFrameworkCore;
    
  • 将以下突出显示的代码添加到 ConfigureServices 方法:

    C#
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
    
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
        var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0";
        services.AddDbContext<BloggingContext>
            (options => options.UseSqlServer(connection));
        // BloggingContext requires
        // using EFGetStarted.AspNetCore.NewDb.Models;
        // UseSqlServer requires
        // using Microsoft.EntityFrameworkCore;
    }
    

生产应用通常会将连接字符串放在配置文件或环境变量中。 为简单起见,本教程在代码中定义它。有关详细信息,请参阅连接字符串 

创建数据库

以下步骤使用迁移创建数据库。

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

  • 运行以下命令:

    PowerShell
    Add-Migration InitialCreate
    Update-Database
    

    如果收到错误,指出 The term 'add-migration' is not recognized as the name of a cmdlet,请关闭并重新打开 Visual Studio。

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

创建控制器

生成 Blog 实体控制器和视图的基架。

  • 在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后选择“添加”>“控制器”。
  • 选择“视图使用 Entity Framework 的 MVC 控制器”,然后单击“添加”。
  • 将“模型类”设置为“Blog”,将“数据上下文类”设置为“BloggingContext”。
  • 单击 添加

基架引擎创建以下文件:

  • 控制器 (Controllers/BlogsController.cs)
  • “创建”、“删除”、“详细信息”、“编辑”和“索引”页面的 Razor 视图 (Views/Blogs/*.cshtml)

运行此应用程序

  • 调试 > 开始执行(不调试)
  • 导航到 /Blogs
  • 使用“新建”链接创建一些博客条目。创建页面
  • 测试“详细信息”、“编辑”和“删除”链接。索引页


通过现有数据库在 ASP.NET Core 上开始使用 EF Core
Startup 类
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }