zoukankan      html  css  js  c++  java
  • asp.net core 系列 21 EF现有数据库进行反向工程

    一.概述

      在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型。  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual Studio 2017和sql server 2012来演示。

      1.1 创建新项目

                       打开 Visual Studio 2017

                       “文件”>“新建”>“项目...”

                       从左菜单中选择“已安装”>“Visual C#”>“Web”。

                       选择“ASP.NET Core Web 应用程序”项目模板

                       输入 EFGetStarted.AspNetCore.ExistingDb 作为名称(它必须完全匹配稍后在代码中使用的命名空间),再单击“确定”

                       等待“新建 ASP.NET Core Web 应用程序”对话框显示出来

                       确保目标框架下拉列表设置为 .NET Core,版本下拉列表设置为 ASP.NET Core 2.2

                       选择“Web 应用程序(模型视图控制器)”模板

                       确保将“身份验证”设置为“无身份验证”

                       单击“确定”

      

      1.2 安装 Entity Framework Core

        安装方法上篇以有介绍。 PM>  install-package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.0

      1.3 对模型实施反向工程

        基于现有数据库创建 EF 模型,选择“工具”–>“NuGet 包管理器”–>“包管理器控制台”。 运行以下命令(一条命令,排版是二行):

        PM> Scaffold-DbContext   "Data Source ={ip};Initial Catalog = EFGetStarted.AspNetCore.NewDb; User ID = hsr;Password =js*2015;" 
        Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

        可以通过将 -Tables 参数添加到上述命令来指定要为哪些表生成实体, 例如 -Tables Blogs,Posts。反向工程过程基于现有数据库的架构创建实体类 (Blogs.cs & Posts.cs) 和派生上下文 (EFGetStartedAspNetCoreNewDbContext.cs),上下文表示与数据库的会话,并允许查询和保存实体类的实例。命令自动生成如下实体类:

            

      1.4 通过依赖关系注入注册上下文

        在 Startup.cs 中注册并配置上下文。这里实现与上一篇一样。通过AddDbContext(...) 方法将EF上下文注册为服务。

            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;
                });
    
                /*
                 using EFGetStarted.AspNetCore.ExistingDb.Models;
                 using Microsoft.EntityFrameworkCore; 
                 */
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
                var connection = "Data Source = {ip}; Initial Catalog = EFGetStarted.AspNetCore.NewDb; User ID = hsr;Password =js*2015;";
                services.AddDbContext<EFGetStartedAspNetCoreNewDbContext>
                    (options => options.UseSqlServer(connection));
            }

      1.5 创建控制器和视图    

        创建BlogsController控制器,在Index方法中读出数据,在视图Blogs/index下显示。

        public class BlogsController : Controller
        {
            public EFGetStartedAspNetCoreNewDbContext NewDbContext { get; }
            public BlogsController(EFGetStartedAspNetCoreNewDbContext _NewDbContext)
            {
                this.NewDbContext = _NewDbContext;
            }
    
            // GET: /<controller>/
            public IActionResult Index()
            {
                var blogs = NewDbContext.Blogs.ToList();
                return View(blogs);
            }
        }
    <!--  index !-->
    @model  IList<Blogs>
    
    @{
        foreach (var item in Model)
        {
            <p>"url:" @item.Url </p>
        }
    }

        在Blogs控制器的index中,通过EF查询出Blogs集合,通过View 重载方法返回一个集合对象 View(blogs), 在Blogs/index页,声明一个IList<Blogs>泛型对象,约定将自动把返回的数据映射到index页面的泛型对象上。如下所示:

       参考文献:

        官方资料:ASP.NET Core 现有数据库 

  • 相关阅读:
    树莓派学习记录
    ESP8266
    城轨列控系统
    VMware+CentOS7学习记录
    眼镜
    调试蜂鸣器驱动电路
    假期作业进度6
    假期作业进度5
    假期作业进度4
    假期作业进度3
  • 原文地址:https://www.cnblogs.com/MrHSR/p/10336962.html
Copyright © 2011-2022 走看看