当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net core 系列 21 EF现有数据库进行反向工程

asp.net core 系列 21 EF现有数据库进行反向工程

2019年02月14日  | 移动技术网IT编程  | 我要评论
一.概述 在上篇中使用EF基于数据模型创建数据库, 本篇继续使用 EF 基于数据库创建数据模型。 实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序。已有数据库使用上篇的EFGetStarted.AspNetCore.NewDb库。这里还是使用Visual S ...

一.概述

  在上篇中使用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 现有数据库 

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网