从零开始构建一个的asp.net Core 项目(二)
接着上一篇博客继续进行。上一篇博客只是显示了简单的MVC视图页,这篇博客接着进行,连接上数据库,进行简单的CRUD。
首先我在Controllers文件夹点击右键,添加->控制器 弹出的对话框中选择miniual Dependencies。在项目的根目录下添加一个Models文件夹,在该文件夹下添加一个Users.cs类。(该类在数据库中对应一张表,表名为Users 里边有三个字段 其中ID是主键,自增的。)
public class Users
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string pwd { get; set; }
}
Users.cs
我再次在Controlles文件夹上点击右键 ,添加->控制器,在弹出的对话框中选择 视图使用Entity Framework 的MVC控制器 模型类选择我刚刚添加的那个Users.cs类,在数据上下文选项中,我选择了新建一个名称为UsersContext.cs 之后点击完成。
系统会给我报错,错误内容为 “No executeable found matching command "dotnet-aspnet-codegenerator”,昨天和今天都困在了这个错误上边,今天下午突然想到,在系统为我生成的带MVC视图页的项目都没有报错,可以正常使用。于是我点开了项目的*.csproj文件,结果发现他比我多了这样的一行代码。
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
</ItemGroup>
于是我把这行代码加进了我的*.csproj文件中去。加进去之后我发现可以了,那个错误解决了。突然之间觉得这个代码好熟悉,应该是在微软的asp.net core 官方说明文档上见过,今天想查一下,这行代码什么作用,可是找了一下,一时间没有找到。
我再次重复在Controlles文件夹上点击右键 ,添加->控制器,在弹出的对话框中选择 视图使用Entity Framework 的MVC控制器 模型类选择我刚刚添加的那个Users.cs类,在数据上下文选项中,我选择了新建一个名称为UsersContext.cs 之后点击完成。
接着系统又给我报了另一个错误 (如图),不过这个错误就明显了,说的大致内容就是“基架编辑StrartUp.cs这个类用DI去注册一个新的Context失败....”
到了这里我想到了,我在添加mini Dependencies 控制器时系统为我生成的一个阅读文件 “ScaffoldingReadMe.txt”,
ASP.NET MVC core dependencies have been added to the project.
However you may still need to do make changes to your project. . Suggested changes to Startup class:
1.1 Add a constructor:
public IConfigurationRoot Configuration { get; } public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
1.2 Add MVC services:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
} 1.3 Configure web app to use use Configuration and use MVC routing: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug(); if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
ScaffoldingReadMe.txt
于是我打开了这个文件,上边的内容说的很清楚让我配置Startup.cs 文件于是我按照上边进行一步步的配置了。直接粘贴就可以。我查看了一下我的跟目录下没有appsettings.json文件,于是我自己添加了这个ASP .NET配置文件,接下来就就可以顺利的进行了。
添加了试图页,修改了数据库的连接字符串。这样基本都完成了。
演示效果如下:
由于是从零开始构建,既然是从零开始,我要搞清楚系统为我生成了什么东西,以及这些东西怎么用。
我点开了*.csproj文件发现用EF的时候系统我们添加了这些的引用。
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0" />
我依次查了对应包的描述说明
1. ”Shared design-time components for Entity Framework Core tools. “应该就是一个组件,配合EF框架使用的。
2.“Microsoft SQL Server database provider for Entity Framework Core.”
3.“Design-time Entity Framework Core Functionality for Microsoft SQL Server.” 由于我用的是Sql Server 的数据库,所以第二和三这两个包应该是EF连数据必须用的
4.“Debug output logger provider implementation for Microsoft.Extensions.Logging. This logger logs messages to a debugger monitor by writing messages with System.Diagnostics.Debug.WriteLine()” 这个应该是我们在StartUp.cs类中添加的
loggerFactory.AddDebug();
这行代码用到的,具体作用就是将运行过程中调试的错误给输出来。
5.“A middleware that supports creating a communication channel between the development environment and one or more web browsers.”这个包的作用我猜测:在我们下断点调试的时侯用到的
6.”Code Generation tool for ASP.NET Core. Contains the dotnet-aspnet-codegenerator command used for generating controllers and views.“这个包包含了一个命令 “dotnet-aspnet-codegenerator” 以后如果用EF的时候出现无法识别“dotnet-aspnet-codegenerator”命令错误 那就是没有加这个包。包的作用就是生成控制器和对应的视图。
我点开了系统为我添加的Data文件夹,里边有一个*context.cs类从名字上可以看出这是一个数据上下文的类,在我们的*Controller.cs 中有一个静态的只读字段就是它,既然点开了*Contrllers.cs类,我就看看这个类里边有什么。除了几个View对应的action 还有一个构造函数,用于对*context.cs类进行初始化。我不禁想这个构造函数在哪里用了,以及怎么初始化了? 我用反编译工具也没又找到。于是放了下来。
我点开了StartUp.cs 这个类。除了我们先前配置的那些东西之外,EF为我们添加了一个服务
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//下边这是EF为我们添加的
services.AddDbContext<UsersContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("UsersContext"))); }
这个服务就是配置了EF连接数据库所用的一个上下文,以及声明了连接的数据库类型是sqlserver,连接数据库的字符串是“UsersContext”里边的值。
UsersContext这个字符串 在我们用EF之前在Startup.cs类中配置的构造函数中声明的。
public IConfigurationRoot Configuration { get; } public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
在这里我们设置了路径为我们当前运行环境的根目录,读取的json文件名为“appsettings.json”,最后把它给了赋值给了Configurtation这个属性。
所以我们在那里才能够找到UsersContext里边的值。
我点开了Views下的share文件夹,发现还有一个生成的文件 _ValidationScriptsPartial.cshtml
<environment names="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment names="Staging,Production">
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive">
</script>
</environment>
_ValidationScriptsPartial.cshtml
这个应该就是model的验证。里边需要引用js文件。我这里没有使用验证,所以我也就没有加上相应的js文件。
其实验证很简单的,比如我上边的Users.cs类中为name加上一个特性 [Required(ErrorMessage = "不能为空")],在前台的添加用户界面中的输入框标签加上一个“asp-validation-for="Name"” 这样当你点击确定时,如果这个输入框为空时系统会给提示,效果如下:
” The validation attributes are checked on the client side before values are posted to the server, as well as on the server before the controller action is called.“这是微软关于验证的说明。也就是双向的。
关于自定义双向验证。可以看一下这篇博客 http://www.cnblogs.com/dudu/p/6812715.html
到了这里系统为我们生成的东西基本都在这里了。可以连接上数据库进行CRUD了。基本到这里就要告一个段落了。
从零开始构建一个的asp.net Core 项目(二)的更多相关文章
- 从零开始构建一个的asp.net Core 项目
最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到"He ...
- 从零开始构建一个的asp.net Core 项目(一)
最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到“Hello W ...
- yoeman构建Asp.net core项目并且实现分层
在Mac上开发使用yoeman构建Asp.net core项目并且实现分层引用 1.Yoeman? yoeman是一个自动化脚手架工具.它提供很多generator,generator相当于Visua ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Docker + Jenkins 持续部署 ASP.NET Core 项目
Docker 是个好东西,特别是用它来部署 ASP.NET Core Web 项目的时候,但是仅仅的让程序运行起来远远不能满足我的需求,如果能够像 DaoCloud 提供的持续集成服务那样,检测 gi ...
- ASP.NET Core 项目简单实现身份验证及鉴权
ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...
- k8s+Jenkins+GitLab-自动化部署asp.net core项目
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1.闲聊 ...
- ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...
随机推荐
- 《Django By Example》第十章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译本章过程中几次想放弃,但是既然 ...
- TensorFlow anaconda命令备忘
[查看tensorflow安装的版本] anaconda search -t conda tensorflow [选择版本安装] conda install -c anaconda tensorflo ...
- iOS开发之视频播放
1.如何播放视频 iOS提供了MPMoviePlayerController.MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频. 提示:网络音频 ...
- raise RuntimeError("autoconf error") RuntimeError: autoconf error
pip 安装模块时遇到下错误,没有粘贴全,差不多都是这样.这个情况是 pip 安装模块 需要 gcc 及 python-devle 支持, ubuntu 是 python-dev ,使用Yum 安装即 ...
- XJOI1680阿猫的实验
阿猫的实验 阿猫很喜欢生物学.他还在今年的全国中学生生物学联赛中获得了一等奖.一天,阿猫在实验室听说了这样一种繁殖能力很强的老鼠.这种老鼠在出生后的第一个月,可以生出a 对老鼠:第二个月,可以生出b ...
- 性能测试分享:Jmeter的api监控工具解决方案
性能测试分享:Jmeter的api监控工具解决方案 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...
- Java基础学习
1,基本类型和引用类型 基本类型就是一个盒子,数据本身就保存在盒子里面,引用类型的盒子里放的是数据的五:地址,通过这个地址来找到数据. 基本数据类型和堆中对象的引用保存在栈中,引用类型保存在堆中. 2 ...
- [编织消息框架][JAVA核心技术]动态代理应用9-扫描class
之前介绍的annotationProcessor能在编译时生成自定义class,但有个缺点,只能每次添加/删除java文件才会执行,那天换了个人不清楚就坑大了 还记得之前介绍的编译时处理,懒处理,还有 ...
- FineUIMvc
FineUIMvc 在线示例源代码下载(包含上面列出的全部 50 种主题,基础版可以免费使用) FineUIMvc 在线示例 FineUI 官网首页
- activity生命周期分析(两个activity之间跳转的生命周期执行顺序)
NoteMainActivity点击跳转至NoteListActivity 我们都了解: 当A界面点击进入B界面时,此时 A===onPause--->onStop ...