首页 > 其他分享 >.NET入门相关学习

.NET入门相关学习

时间:2023-05-19 14:15:27浏览次数:42  
标签:set 入门 get 视图 学习 实体类 context NET public

今日任务:制作一个可以对数据库增删改的简单信息系统。


 

利用官方教程做一个简单的学习。

制作步骤整理:

一、创建ASP.NET Core Web 应用项目。

二、更改Pages/Shared/_Layout.cshtml设置网站页眉、页脚和菜单,用于之后新建功能页面的跳转。

 1 <ul class="navbar-nav flex-grow-1">
 2 @*修改内部li标签为:
 3     <li class="nav-item">
 4         <a class="nav-link text-dark" asp-area="" asp-page="/Pages下的路径地址">显示的菜单项名字</a>
 5     </li>
 6     即可改变主页菜单栏和点击跳转页面,例如菜单栏设置About项并且点击此项跳转到位于Pages文件夹下的/About页:
 7 *@
 8     <li class="nav-item">
 9         <a class="nav-link text-dark" asp-area="" asp-page="/About">About</a>
10     </li>
11 </ul>        

 三、在项目中创建Models文件夹,并且在该文件夹中创建类,内容为数据模型实体与属性信息。需要定义各类属性、相关实体集合。

namespace 项目名.Models{
    public class 实体名{
        public int INT类型属性 { get; set; }
        public string String类型属性 { get; set; }
        public DateTime DateTime类型属性 { get; set; }
        ......
        public ICollection<与此有关系的实体类名> 与此有关系的实体类名的集合名,一般直接用复数 { get; set; }
    }
}//部分类可能需要额外引入using

以官方的Student实体为例,创建的类Models/Student.cs为:

namespace ContosoUniversity.Models{
    public class Student{
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }
        public ICollection<Enrollment> Enrollments { get; set; }
    }
}

指定主键用:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int xxxxxID { get; set; }

编译器可能会出现空引用类型警告,不用管,不影响运行。

四、使用ASP.NET Core基架工具生成功能界面,界面将含有实体创建、读取、更新、删除功能:

1、在Pages下新建实体所用文件夹,一般命名为实体复数;

2、选择新建的文件夹,右键单击“添加”,再点击“新搭建基架的项目”;

3、在弹出窗口左侧选择“已安装”-“通用”-“Razor Pages”,窗口中部选择“使用 Entity Framework (CRUD) 的 Razor Pages”,选择添加;

4、“模型类”下拉列表选择所需类;“数据上下文类”点击右侧“+”,将结尾最后一个字段改为“类名Context”;选择“添加”-“添加”。

VS2022会自动安装三个包,并在Pages/Students文件夹内创建五个界面的类和视图,同时创建Data/xxxContext类,还会自动修改Program.cs和appsettings.json。但是自动连的数据库是连接的是SQL ServerLocalDB,会在 C:/Users/<user> 目录中创建 .mdf 文件,只能开发用。

其中在基架搭建后需要手动的操作:

1、Data/xxxContext类内需要另外添加函数:

protected override void OnModelCreating(ModelBuilder modelBuilder){
    modelBuilder.Entity<系统用到的实体类类名>().ToTable("对应表名");
    //例如:modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
    //功能似乎是让不同实体能互相引用
}

2、Programs.cs内需要另外添加语句:

(可能需要添加的NuGet包:Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore)

在var app = biuder.Build();行之前添加语句:

builder.Services.AddDatabaseDeveloperPageExceptionFilter();

在if (!app.Environment.IsDevelopment()) {...... }段尾添加语句:

else{
    app.UseDeveloperExceptionPage();
    app.UseMigrationsEndPoint();
}

没有现成数据库的话需要接着在刚刚插入的else{.......}之后继续插入:

using (var scope = app.Services.CreateScope()){
    var services = scope.ServiceProvider;
    var context = services.GetRequiredService<xxxContext>();
    context.Database.EnsureCreated();
}

如果此段代码插入,那么在没有数据库的情况下会创建空库,可以这样子添加数据库代码:在刚刚代码段中context.Database.EnsureCreated();行后加入

DbInitializer.Initialize(context);

然后在Data文件夹下新建DbInitializer类(后缀名cs),内容为:

using 项目名.Models;

namespace 项目名.Data{
    public static class DbInitializer{
        public static void Initialize(SchoolContext context){

            if (context.实体类名.Any()){
                return;   // DB has been seeded
            }
            var 临时变量名 = new 实体类名[]{
                new 实体类名{属性1="xxxx",属性2="xxxx",......},
                new 实体类名{属性1="xxxx",属性2="xxxx",......},
                ......
                new 实体类名{属性1="xxxx",属性2="xxxx",......},}
            };

            context.实体类名.AddRange(临时变量名);
            context.SaveChanges();

            //其他实体类填充同上
    }
}

 

到此步为止,已经可以运行跑页面测试对应的实体页面功能。

  • 删除数据库操作:在程序包管理器控制台(PMC)中执行命令: Drop-Database -Confirm 并输入Y响应。然后重启应用。
  • 查看数据库操作:从 Visual Studio 中的“视图”菜单打开 SQL Server 对象资源管理器 (SSOX) 选择“(localdb)\MSSQLLocalDB”然后如下图所示展开查看

 


目前未解决的问题:

只能对页面数据做删除处理,无法进行新数据条的创建和更改。


所查资料的额外笔记1

基架生成文件开头所用的ViewData关键字用法

设置字典,方便从控制器中传达数据。例如在对应xxxController.cs文件中的对应视图函数:

public IActionResult Welcome(string name, int numTimes = 1){
    ViewData["Message"] = "Hello " + name;
    ViewData["NumTimes"] = numTimes;
    return View();
}

在视图文件xxx.cshtml中可以设置:

<ul>@for (int i = 0; i < (int)ViewData["NumTimes"]; i++){
        <li>@ViewData["Message"]</li>
    }
</ul>

就可以循环输出ViewData["NumTimes"]次ViewData["Message"]了,效果如下:访问 https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4 是页面为:

 


 

所查资料的额外笔记2

视图与控制器传值的用法

视图编辑:

<form action="方法名" method="post">
    <label for="content">值内容</label>
    <input type="text"  name="参数名" id="content" /><br />
    <input type="submit" value="表单传值">
</form>

控制器编辑:

public ActionResult 方法名(FormCollection fc){
    ViewBag.message = fc["参数名"];
    return View();
}//控制器把数据传给视图
public ActionResult 方法名(){
    ViewBag.message =Request.Form["参数名"];
    return View();
}//控制器从视图获取数据

 

标签:set,入门,get,视图,学习,实体类,context,NET,public
From: https://www.cnblogs.com/yyn20230517/p/17414152.html

相关文章

  • “Linux 基础入门(新版)”实验报告 Linux 目录结构及文件基本操作
    Linux目录结构及文件基本操作来Linux目录结构UNIX是以目录为主的,Linux也继承了这一优良特性。Linux是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说Linux......
  • Linux 基础入门(新版)”实验报告 基本概念及操作
    实验2基本概念及操作1.Linux桌面环境介绍UNIX/Linux本身是没有图形界面的,UNIX/Linux发行版上看到的图形界面实际都只是运行在Linux系统之上的一套软件。现在这套软件为xorg(X.Org),而这套软件又是通过X窗口系统(XWindowSystem,也常被称为X11或X)实现的,X本身只是工具包及......
  • “Linux 基础入门(新版)”实验报告 用户及文件权限管理
    用户及文件权限管理1.查看用户$whoami或者$whomomlikes输出的第一列表示打开当前伪终端的用户的用户名,第二列的pts/0中pts表示伪终端,pts/0后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入whoami,看第二列是不是就变成pts/1了,第......
  • C++ Primer 学习笔记—— 第三章
    第三章字符串、向量和数组前言标准库是C++必不可少的一部分,作为C++的延伸,标准库的优雅令人陶醉。如标题所言,在这一章我们将要学习数组、字符串和向量。若学习过其他编程语言,相信对数组并不陌生。其作为固定存储序列,能够为我们提供很多数据结构的解决思路,但是其在灵活性方面的......
  • 2023最新OneTool多平台助手程序源码
    2023最新OneTool多平台助手程序源码开心可用版本:https://download.csdn.net/download/mo3408/87799108OneTool 是一款功能强大的多平台助手,目前最新版本为199911(1.9.1)。除此之外,该应用程序还拥有其他好玩的功能,等着您们来搭建测试。可以帮助用户快速完成各种任务。例如网......
  • 使用MASA Stack+.Net 从零开始搭建IoT平台 第四章 4.2使用时序库存储上行数据
    目录前言分析实施步骤时序库的安装解决playload没有时间戳问题代码编写测试总结前言我们可以将设备上行数据存储到关系型数据库中,我们需要两张带有时间戳的表(最新数据表和历史数据表),历史数据表存储所有设备上报的数据,最新数据表需要存储设备最新一条上报数据,这条最新数据相当......
  • GO web学习(二)
    跟着b站https://space.bilibili.com/361469957杨旭老师学习做的笔记Response响应ResponseWriter包括Writer,WriterHeader,Header从服务器向客户端返回响应需要使用ResponseWriterResponseWriter是一个接口,handler用它来返回响应真正支撑ResponseWriter的幕后struct......
  • 如何部署ASP.NET Core到Linux服务器
    #如何部署ASP.NETCore到Linux服务器我们开发的最终目的,是将开发后的东西发布网络上,以便自己及其他人使用。本篇博客介绍如果在linux上部署ASP.NETCore应用,使用nginx+systemd来管理我们的应用。##准备-Ubuntu20.04-Nginx-DOTNETSDK或Runtime##安装-......
  • DHub Superworks自动化学习项目图纸
    分享一套 Superworks自动化设计项目图纸,包括封面,图纸目录,高层代号位置代号,原理图22张,部件汇总表,元件列表,连接列表,接线图,端子列表。下载以后打开swPro文件以打开整个项目。没有安装Superworks自动化设计的朋友可根据项目包中的readme文件安装。......
  • 软件工程快速入门
    什么是SDLC?软件开发生命周期(SDLCSoftwareDevelopmentLifecycle)是构建软件的系统过程,可确保构建软件的质量和正确性。SDLC流程旨在生产满足客户期望的高质量软件。软件开发应在预定义的时间范围和成本内完成。SDLC包含详细的计划,解释如何规划,构建和维护特定的软件。SDLC生......