欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CodeFirst从零开始搭建Asp.Net Core2.0网站

程序员文章站 2022-06-03 15:07:56
一步步教大家如何搭建asp.net core2.0网站,以下所有都是建立在.netcore2.0环境已经搭建好 右键解决方案>新建项目> 选择web>...

一步步教大家如何搭建asp.net core2.0网站,以下所有都是建立在.netcore2.0环境已经搭建好

右键解决方案>新建项目>

选择web>asp.netcoreweb应用程序(.net core)

CodeFirst从零开始搭建Asp.Net Core2.0网站

选择web应用程序,暂时不选择启用docker,身份验证选择个人用户账户(会自动生成一系列和用户认证的代码)

CodeFirst从零开始搭建Asp.Net Core2.0网站

CodeFirst从零开始搭建Asp.Net Core2.0网站

随后生代码层次目录如下:

CodeFirst从零开始搭建Asp.Net Core2.0网站

其中会包含身份信息的相关实现,比如相关实体信息(user)之类的,如果想对扩展微软自动的生成的用户实体类,可在models中的applicationuser下扩展,在此applicationuser中添加属性即可:比如添加叫wechatid属性,添加后如下:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.identity;

namespace dotnetcore20.web.models
{
  // add profile data for application users by adding properties to the applicationuser class
  public class applicationuser : identityuser
  {
    /// <summary>
    /// 微信id
    /// </summary>
    public string wechatid { get; set; }
  }
}

在之后生成运行并迁移,数据库的aspnetusers中就会多出wechatid 属性.

一:安装引用

nugnet恢复引用失效时,可在程序包管理控制台输入:

dotnet restore 即可

CodeFirst从零开始搭建Asp.Net Core2.0网站

会发现在恢复指令后在nuget中会有一个microsoft.visualstudio.web.codegeneration.design的报错,信息如下:

已使用“.netportable,version=v0.0,profile=profile259, .netframework,version=v4.6.1”而不是项目目标框架“.netcoreapp,version=v2.0”还原了包“microsoft.composition 1.0.27”。这可能会导致兼容性问题

这个库是asp.net core的代码生成工具。包含用于生成控制器和视图的dotnet-aspnet-codegenerator命令,暂时可先卸载,不影响项目运行.

对项目类库的引用有以下几种方式

1.nuget去安装(官网https://www.nuget.org/packages/)

2.右键依赖项点击菜单中的添加引用

3.可在程序包管理控制台输入:install-package引用类库名称

4.可右键编辑csproj工程文件进行添加,然后执行dotnet restore

CodeFirst从零开始搭建Asp.Net Core2.0网站

二.创建实体程序集

右键解决方案>添加项目>

CodeFirst从零开始搭建Asp.Net Core2.0网站

首先创建抽象类,供entity实体继承,主要为每个实体提供公用属性

using system;
using system.collections.generic;
using system.componentmodel.dataannotations;
using system.runtime.serialization;
using system.text;

namespace dotnetcore20.entity.core
{
  /// <summary>
  /// db表基底
  /// </summary>
  [serializable]
  public abstract partial class baseentity
  {
    /// <summary>
    /// id
    /// </summary>
    [datamember]
    public long id { get; set; }

    /// <summary>
    /// db 資料版號
    /// </summary>
    [timestamp]
    public byte[] rowversion { get; set; }

    /// <summary>
    /// 创建时间
    /// </summary>
    [datamember]
    public datetime createtime { get; set; }

    /// <summary>
    /// 更新时间
    /// </summary>
    [datamember]
    public datetime updatetime { get; set; }

    /// <summary>
    /// 状态
    /// </summary>
    [datamember]
    public enumstate state { get; set; }
  }

  /// <summary>
  /// 状态
  /// </summary>
  public enum enumstate
  {
    /// <summary>
    /// 删除
    /// </summary>
    delete = 1,

    /// <summary>
    /// 正常
    /// </summary>
    normal = 0,
  }
}

添加一个userextend用户扩展类(entity):

using dotnetcore20.entity.core;
using system;
using system.runtime.serialization;

namespace dotnetcore20.entity
{
  [datacontract]
  public class userextend : baseentity
  {
    /// <summary>
    /// 用户id
    /// </summary>
    [datamember]
    public long userid { get; set; }

    /// <summary>
    /// 昵称
    /// </summary>
    [datamember]
    public long nickname { get; set; }

  }
}

三.创建数据层

CodeFirst从零开始搭建Asp.Net Core2.0网站

添加引用

dal层需要用到ef实体映射相关和我们自己前面定义的entity中的userextend实体表,所以要添加相关引用,dotnetcore20.entity和 microsoft.entityframeworkcore.tools

快捷键:ctrl+alt+o 打开程序包管理器输入以下:

install-package microsoft.entityframeworkcore.tools

CodeFirst从零开始搭建Asp.Net Core2.0网站

如果是网络限制下载失败,推荐把nuget镜像改为博客园资源,方法如下:

右键解决方案>管理解决方案的nuget程序包.显示如下:

CodeFirst从零开始搭建Asp.Net Core2.0网站

CodeFirst从零开始搭建Asp.Net Core2.0网站

新建一个数据上下文类,目录结构如下:

CodeFirst从零开始搭建Asp.Net Core2.0网站

dotnetcoredbcontext内部代码改为以下:

using dotnetcore20.entity;
using microsoft.entityframeworkcore;

namespace dotnetcore20.dal.dbcontext
{
  public class dotnetcoredbcontext : microsoft.entityframeworkcore.dbcontext
  {
    public dotnetcoredbcontext(dbcontextoptions<dotnetcoredbcontext> options) : base(options)
    {
    }
    public dbset<userextend> userextend { get; set; }
  }
}

在此基本的实体映射相关的代码都完毕,现在还有一步,就是数据库连接字符串的配置

首先打开appsettings.json文件,在connectionstrings节点下增加以下

复制代码 代码如下:
"dotnetcoreconnection": "server=(localdb)\\mssqllocaldb;database=dotnetcoredb;trusted_connection=true;multipleactiveresultsets=true"

增加后如下:

{
  "connectionstrings": {
    "defaultconnection": "server=(localdb)\\mssqllocaldb;database=dotnetcoredefaultdb;trusted_connection=true;multipleactiveresultsets=true",
    "dotnetcoreconnection": "server=(localdb)\\mssqllocaldb;database=dotnetcoredb;trusted_connection=true;multipleactiveresultsets=true"
  },
 "logging": {
  "includescopes": false,
  "debug": {
   "loglevel": {
    "default": "warning"
   }
  },
  "console": {
   "loglevel": {
    "default": "warning"
   }
  }
 }
}

再打开web网站下的startup文件,在configureservices方法中添加一下行:

//自定义数据库连接字符串
services.adddbcontext<dotnetcoredbcontext>(options =>
 options.usesqlserver(configuration.getconnectionstring("dotnetcoreconnection")));

增加后如下:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.builder;
using microsoft.aspnetcore.diagnostics.entityframeworkcore;
using microsoft.aspnetcore.identity;
using microsoft.aspnetcore.http;
using microsoft.entityframeworkcore;
using microsoft.aspnetcore.hosting;
using microsoft.extensions.configuration;
using microsoft.extensions.dependencyinjection;
using microsoft.extensions.options;
using dotnetcore20.web.data;
using dotnetcore20.web.models;
using dotnetcore20.web.services;
using dotnetcore20.dal.dbcontext;

 
namespace dotnetcore20.web
{
  public class startup
  {
    public startup(iconfiguration configuration)
    {
      configuration = configuration;
    }

    public iconfiguration configuration { get; }

    // this method gets called by the runtime. use this method to add services to the container.
    public void configureservices(iservicecollection services)
    {
      services.adddbcontext<applicationdbcontext>(options =>
        options.usesqlserver(configuration.getconnectionstring("defaultconnection")));

      //自定义数据库连接字符串
      services.adddbcontext<dotnetcoredbcontext>(options =>
        options.usesqlserver(configuration.getconnectionstring("dotnetcoreconnection")));

      services.addidentity<applicationuser, identityrole>()
        .addentityframeworkstores<applicationdbcontext>()
        .adddefaulttokenproviders();

      // add application services.
      services.addtransient<iemailsender, authmessagesender>();
      services.addtransient<ismssender, authmessagesender>();

      services.addmvc();
    }

    // this method gets called by the runtime. use this method to configure the http request pipeline.
    public void configure(iapplicationbuilder app, ihostingenvironment env)
    {
      if (env.isdevelopment())
      {
        app.usedeveloperexceptionpage();
        app.usebrowserlink();
        app.usedatabaseerrorpage();
      }
      else
      {
        app.useexceptionhandler("/home/error");
      }

      app.usestaticfiles();

      app.useauthentication();

      app.usemvc(routes =>
      {
        routes.maproute(
          name: "default",
          template: "{controller=home}/{action=index}/{id?}");
      });
    }
  }
}

运行程序,点击登陆(只要访问数据库的操作都可),出现错误页面:

CodeFirst从零开始搭建Asp.Net Core2.0网站

点击应用迁移CodeFirst从零开始搭建Asp.Net Core2.0网站,即自动迁移数据库.

由于两个数据库,只会自动迁移关于用户的表aspnetusers,

所以还得vs中程序包管理器中下命令迁移.

add-migration firstmigration -context dotnetcoredbcontext

以上命令执行后再执行以下命令:

update-database -contextdotnetcoredbcontext;

然后查看数据库会发现多出两个数据库,

以dotnetcoredefaultdb生成的为例,会生成如下表:

CodeFirst从零开始搭建Asp.Net Core2.0网站

其中aspnetusers就中会有之前添加的wechatid字段

CodeFirst从零开始搭建Asp.Net Core2.0网站

然后再次运行程序:

CodeFirst从零开始搭建Asp.Net Core2.0网站

这样一个完整的asp.netcore2.0网站就初步运行起来了

下一篇将在dal层增加repository和unitworks,完成简单crud的统一管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。