[ASP.NET core 3] 我尝试使用 Entity Framework Core 下载 CSV 文件
大家好,我是系统开发部的永谷。
我目前正在使用 ASP.NET core 进行开发,并且正在使用 Entity Framework Core 3。我可以通过单击 按钮来下载使用 Entity Framework Core 从数据库检索的数据作为 CSV 文件。被使用。
这次我就来介绍一下如何实现。
创建一个项目
首先,创建一个 ASP.NET Core 3 MVC 项目。
1. 打开 Visual Studio 2019
2. 选择“创建新项目”
3. 选择“ASP.NET Core Web 应用程序”
4. (可选)输入项目名称并创建它(这次是 CsvDownload)
项目现已创建。
启用 ASP.NET Core 3 以使用 Entity Framework Core 3
官方文档,因此请参考它并设置以使用 Entity Framework Core 3。
由于目的是介绍如何实现CSV文件下载,这里就省略了。
准备数据
首先,我们需要准备数据来下载 CSV 文件,因此让我们使用 Entity Framework Core 3 创建一个表并插入数据。
■ 准备表
这次,我们将准备一个Users 表。
列是
Id:主键
姓名:姓名
年龄:年龄
身高:身高
体重:体重
我们开始做吧。
■ 创建用户模型
接下来,要创建上表,请准备用户模型。
在Models文件夹下创建User.cs。
打开创建的 User.cs 并定义列属性,如下面的代码所示。
命名空间 CsvDownload.Models { ///<summary> /// 用户表的模型类 ///</summary> public class User { public int Id { get; } // ID 主键 Name { get; } // 年龄 public float Height { get; } // 高度 public float Weight { set; } // 重量 } }
■ 创建上下文文件
接下来,准备一个上下文文件来连接数据库和模型。
这次我在项目下创建了Context.cs。
在创建的Context.cs中编写以下代码。
使用 CsvDownload.Models; 使用 Microsoft.EntityFrameworkCore 命名空间 CsvDownload;<summary> /// 用于连接数据库的上下文类 ///</summary>公共类上下文:DbContext { 公共上下文(DbContextOptions<Context> options) : base(options) { } // 用于设置模型的公共 DbSet<User> Users { get; set; } // 属性名称成为表名称(在本例中,将创建 Users 表) } }
■ 将创建的上下文文件添加到 DI 容器中,以便可以将其用作 Entity Framework Core
接下来,将之前创建的上下文添加到 Startup.cs 的 ConfigureServices 方法中
services.AddDbContext<Context> (选项=>选项.UseSqlServer("服务器=(localdb)\\mssqllocaldb;数据库=CsvDownload;Trusted_Connection=True;MultipleActiveResultSets=true"));
*请根据需要输入数据库连接字符串(UseSqlServer部分)。如果您没有特别的偏好,上面的描述将在本地环境中创建一个CsvDownload DB。
■ 创建迁移文件
现在准备工作已完成,让我们创建一个迁移文件来创建Users 表。
只需从控制台运行命令即可轻松创建。
从工具中打开包管理器控制台
打开控制台并运行以下命令
PM> 添加-迁移 CreateTableUsers
*Add-Migration后面的名称是迁移名称。请根据需要设置。
这将创建一个 Migration 文件夹并在其中创建一个迁移文件和一个迁移快照文件。
在控制台上运行该命令,就像您在创建迁移文件
以运行迁移执行迁移的命令如下。
PM> 更新数据库
如果成功,将创建数据库并创建用户表。
*可以从[视图]⇒[SQL Server 对象资源管理器]进行检查。
■ 插入数据
现在表已创建,只需插入适当的数据即可。
* 从[SQL Server对象资源管理器]中选择一个表,然后单击[显示数据]以显示表中的数据,以便您可以直接从那里插入。
↓
实现 CSV 下载功能
抱歉让您久等了……现在终于进入正题了。
让我们能够下载之前在 CSV 中插入的用户表数据。
■ 安装CsvHelper 软件包
首先,安装下载CSV 格式所需的名为CsvHelper 的软件包,
选择[工具] ⇒ [NuGet 软件包管理器] ⇒ [管理解决方案的NuGet 软件包],输入后会出现[CsvHelper]。
■ 安装CSV 下载按钮
这次,我们在默认主屏幕上安装一个按钮。
[查看]文件夹⇒[主页]⇒打开[index.cshtml]
使用 a 标签将 CSV 下载按钮添加到查看文件,如下所示。
@{ ViewData["标题"] = "首页" }<div class="text-center"><h1 class="display-4">欢迎</h1><p>了解如何<a href="https://docs.microsoft.com/aspnet/core">使用 ASP.NET Core 构建 Web 应用程序</a>。</p> @*添加CSV下载按钮*@<a asp-action="CsvDownload" class="btn btn-primary">用户CSV下载</a></div>
*通过在a标签中用asp-action指定Controller动作,href属性将自动补全。
我们已经安装了一个按钮
来实现CSV 下载过程由于我们上面将 Action 设置为 CsvDownload,所以让我们将 CsvDownload 操作添加到 HomeController 并在其中实现 CSV 下载过程。
打开 [Controllers] 文件夹 ⇒ [HomeController.cs]
添加 CsvDownload 操作,如下所示。
使用 System.Collections.Generic; 使用 System.Linq; 使用 Microsoft.AspNetCore.Mvc; 使用 Microsoft.Extensions.Logging;使用 System.IO;使用 CsvHelper;使用 System.Globalization 命名空间 CsvDownload.Controllers { public class HomeController : Controller { private readonly ILogger;<HomeController> _logger; 私有只读上下文 _context;<HomeController> logger, Context context) { _logger = logger; // 在构造函数中定义上下文 _context = context; } public IActionResult Index() { return View(); } public IActionResult Privacy() { return View(); Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });<summary> /// CSV 下载 ///</summary> ///<returns> CSV 文件</returns>public FileContentResult CsvDownload() { // CSV 文件名 string csvFileName = "UserData.csv"; // 分配内存 using (var memory = new MemoryStream()) using (var writer = new StreamWriter(memory)) using ( var csv = new CsvWriter(writer, new CultureInfo(0x0411, false))) { // 使用上下文列表从 Users 表中获取数据<User>users = _context.Users.ToList(); // 记录获取的数据 csv.WriteRecords(users); writer.Flush(); // 输出为 CSV 文件 return File(memory.ToArray(), "text/ csv" , csv文件名);
■ 操作检查
现在我们已经完成了实现,让我们最后检查一下操作。
构建并打开主屏幕。
显示[用户CSV下载]按钮,单击该按钮即可下载CSV文件。
当您打开该文件时,您可以看到用户表数据已注册,如下所示。
现在您可以下载 CSV 文件。
以上是一般工艺流程。
评论
■ 您
可能不想输出某些CSV 下载不需要的列,例如ID。
对于这种情况,可以通过在Model类中不想输出的列(属性)添加[ignore]属性(需要添加using CsvHelper.Configuration.Attributes;)来处理。
使用 CsvHelper.Configuration.Attributes; 命名空间 CsvDownload.Models { ///<summary> /// 用户表的模型类 ///</summary> public class User { [Ignore] public int Id { get; } // ID 主键 public string Name { get; } // 名称 public int Age { get; ; } // 高度 public float 重量 { } // 重量 } }
现在,当您下载文件时,将不会输出 ID 列。
■ 我想更改标题名称
目前,模型属性名称按原样输出标题,但您也可以更改它。
您所要做的就是将 [Name] 属性添加到要更改的属性中。
使用 CsvHelper.Configuration.Attributes; 命名空间 CsvDownload.Models { ///<summary> /// 用户表的模型类 ///</summary> public class User { [Ignore] public int Id { get; // ID 主键 [Name("Name")] public string Name { get; } // 名称 [Name("Age")]; int Age { get; set; } // 年龄 [Name("Height")] public float Height { get; } // 身高 [Name("Weight")] public float Weight { set;重量 } }
现在,当您下载文件时,您可以看到标头已更改。
概括
你觉得怎么样?
相信在管理系统等中经常需要CSV下载功能,所以希望本文对大家有所帮助。
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
好吧,就是这样。
非常感谢!