使用 .NET Core MVC 3.0 将 .CSV 插入 AspNetUsers
Insert .CSV into AspNetUsers using .NET Core MVC 3.0
所以基本上我正在尝试从客户端获取上传的 .csv 文件并将其插入 Dbo.AspNetUsers。
我已经为从 .csv
获得的三个字段定义了以下文件
public class CsvStudent : IdentityUser
{
public string Name { get; set; }
public int Number { get; set; }
public string Course { get; set; }
}
下面是从客户端上传 .csv 的代码。
<form class="col-xs-12" method="post" asp-controller="User" asp-action="ImportUsers" enctype="multipart/form-data">
<div class="form-group">
<input type="file" class="form-control" name="file" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary col-xs-12">Add</button>
</div>
</form>
这是到目前为止应该获取上传的 .csv 的控制器。
public async Task<IActionResult> ImportUsers(IFormFile file)
{
var data = new MemoryStream();
file.CopyTo(data);
TextReader reader = new StreamReader(data);
var csvReader = new CsvReader(reader);
var records = csvReader.GetRecords<User>();
我什至不确定上面的代码是否正确读取 .csv,但基本上我想在这里做的,正如我在第一段中解释的那样,
是将记录上传到 dbo.AspNetUsers table,我不确定该怎么做。
提前致谢!
您可以参考下面的demo:
1.Model 和 ApplicationDbContext:
public class CsvStudent : IdentityUser
{
public string Name { get; set; }
public int Number { get; set; }
public string Course { get; set; }
[NotMapped]
public string Password { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<CsvStudent>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
2.CSV 文件:
Name,Number,Course,Password
Sherry,6,Chinese,Sherry123#
Daniel,2,Math,Daniel456#
3.Controller :
public async Task<IActionResult> ImportUsers(IFormFile file)
{
var data = new MemoryStream();
await file.CopyToAsync(data);
data.Position = 0;
TextReader reader = new StreamReader(data);
var csvReader = new CsvReader(reader ,new CsvHelper.Configuration.Configuration
{
HasHeaderRecord = true, //Gets or sets a value indicating if the CSV file has a header record. Default is true.
HeaderValidated = null,//Gets or sets the function that is called when a header validation check is ran
MissingFieldFound=null //Gets or sets the function that is called when a missing field is found.
});
var records = csvReader.GetRecords<CsvStudent>().ToList();
foreach (var item in records)
{
//check if the user has been existing in db
var user = await _userManager.FindByNameAsync(item.Name);
if (user == null)
{
user = new CsvStudent
{
Name = item.Name,
Number = item.Number,
Course = item.Course,
UserName = item.Name
};
await _userManager.CreateAsync(user, item.Password);
}
}
return Json(records);
}
更多关于CsvHelper.Configuration的细节,你可以参考here。
所以基本上我正在尝试从客户端获取上传的 .csv 文件并将其插入 Dbo.AspNetUsers。 我已经为从 .csv
获得的三个字段定义了以下文件public class CsvStudent : IdentityUser
{
public string Name { get; set; }
public int Number { get; set; }
public string Course { get; set; }
}
下面是从客户端上传 .csv 的代码。
<form class="col-xs-12" method="post" asp-controller="User" asp-action="ImportUsers" enctype="multipart/form-data">
<div class="form-group">
<input type="file" class="form-control" name="file" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary col-xs-12">Add</button>
</div>
</form>
这是到目前为止应该获取上传的 .csv 的控制器。
public async Task<IActionResult> ImportUsers(IFormFile file)
{
var data = new MemoryStream();
file.CopyTo(data);
TextReader reader = new StreamReader(data);
var csvReader = new CsvReader(reader);
var records = csvReader.GetRecords<User>();
我什至不确定上面的代码是否正确读取 .csv,但基本上我想在这里做的,正如我在第一段中解释的那样, 是将记录上传到 dbo.AspNetUsers table,我不确定该怎么做。 提前致谢!
您可以参考下面的demo:
1.Model 和 ApplicationDbContext:
public class CsvStudent : IdentityUser
{
public string Name { get; set; }
public int Number { get; set; }
public string Course { get; set; }
[NotMapped]
public string Password { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<CsvStudent>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
2.CSV 文件:
Name,Number,Course,Password
Sherry,6,Chinese,Sherry123#
Daniel,2,Math,Daniel456#
3.Controller :
public async Task<IActionResult> ImportUsers(IFormFile file)
{
var data = new MemoryStream();
await file.CopyToAsync(data);
data.Position = 0;
TextReader reader = new StreamReader(data);
var csvReader = new CsvReader(reader ,new CsvHelper.Configuration.Configuration
{
HasHeaderRecord = true, //Gets or sets a value indicating if the CSV file has a header record. Default is true.
HeaderValidated = null,//Gets or sets the function that is called when a header validation check is ran
MissingFieldFound=null //Gets or sets the function that is called when a missing field is found.
});
var records = csvReader.GetRecords<CsvStudent>().ToList();
foreach (var item in records)
{
//check if the user has been existing in db
var user = await _userManager.FindByNameAsync(item.Name);
if (user == null)
{
user = new CsvStudent
{
Name = item.Name,
Number = item.Number,
Course = item.Course,
UserName = item.Name
};
await _userManager.CreateAsync(user, item.Password);
}
}
return Json(records);
}
更多关于CsvHelper.Configuration的细节,你可以参考here。