CodeFirst从零开始搭建Asp.Net Core2.0网站
一步步教大家如何搭建asp.net core2.0网站,以下所有都是建立在.netcore2.0环境已经搭建好
右键解决方案>新建项目>
选择web>asp.netcoreweb应用程序(.net core)
选择web应用程序,暂时不选择启用docker,身份验证选择个人用户账户(会自动生成一系列和用户认证的代码)
随后生代码层次目录如下:
其中会包含身份信息的相关实现,比如相关实体信息(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 即可
会发现在恢复指令后在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
二.创建实体程序集
右键解决方案>添加项目>
首先创建抽象类,供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; } } }
三.创建数据层
添加引用
dal层需要用到ef实体映射相关和我们自己前面定义的entity中的userextend实体表,所以要添加相关引用,dotnetcore20.entity和 microsoft.entityframeworkcore.tools
快捷键:ctrl+alt+o 打开程序包管理器输入以下:
install-package microsoft.entityframeworkcore.tools
如果是网络限制下载失败,推荐把nuget镜像改为博客园资源,方法如下:
右键解决方案>管理解决方案的nuget程序包.显示如下:
新建一个数据上下文类,目录结构如下:
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节点下增加以下
增加后如下:
{ "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?}"); }); } } }
运行程序,点击登陆(只要访问数据库的操作都可),出现错误页面:
点击应用迁移,即自动迁移数据库.
由于两个数据库,只会自动迁移关于用户的表aspnetusers,
所以还得vs中程序包管理器中下命令迁移.
add-migration firstmigration -context dotnetcoredbcontext
以上命令执行后再执行以下命令:
update-database -contextdotnetcoredbcontext;
然后查看数据库会发现多出两个数据库,
以dotnetcoredefaultdb生成的为例,会生成如下表:
其中aspnetusers就中会有之前添加的wechatid字段
然后再次运行程序:
这样一个完整的asp.netcore2.0网站就初步运行起来了
下一篇将在dal层增加repository和unitworks,完成简单crud的统一管理
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android开发之开关按钮用法示例
下一篇: 哎
推荐阅读
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之七使用JWT生成Token(个人见解)
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十一Swagger使用一
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十数据库基础方法的封装
-
[目录] ASP.Net Core 搭建微服务网站
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之九如何进行用户权限控制
-
CodeFirst从零开始搭建Asp.Net Core2.0网站
-
ASP.NET Core 一步步搭建个人网站(5)_Api模拟和网站分析
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之六使用过滤器进行全局请求数据验证
-
搭建ASP.NET MVC5框架(1) 从零开始
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之八MemoryCache与redis缓存的使用