【发布时间】:2020-03-24 05:39:40
【问题描述】:
我有一个用户列表,我想使用 excel 文件导入我的应用程序。
这个过程涉及几个表,即:Users、Roles、PasswordPolicy、Quotations、DocumentTypes
目前流程如下:
当我上传我的 Excel 时,它会读取并填充用户对象列表。然后返回此列表,然后将其传递给另一个函数,我在其中创建角色、密码策略、引用和 DocumentType。
这就是我通常创建 1 个用户的方式
var applicationUser = new User
{
FirstName = StripTags.Strip(Input.FirstName),
LastName = StripTags.Strip(Input.LastName),
UserName = StripTags.Strip(Input.UserName),
Email = StripTags.Strip(Input.Email),
PhoneNumber = StripTags.Strip(Input.PhoneNumber),
DateOfBirth = Input.DateOfBirth,
NormalizedUserName = Input.UserName.ToUpper(),
NormalizedEmail = Input.Email.ToUpper()
};
var result = _userManager.CreateAsync(applicationUser, Input.Password);
if (result.Result.Succeeded)
{
return applicationUser;
}
else
{
return null;
}
但是,问题是我的输入 Excel 中只有 1000 行,创建它可能需要 20 多分钟。
我正在尝试为我的其他表格搜索批量插入选项以加快速度,但到目前为止我只找到了一种付费解决方案。
我使用 MySQL。 .net core 2.2 是否有批量插入 efcore 库?
我也尝试过使用 SqlBulkCopy 方法,但我不断收到异常说明
不支持关键字“端口”
这是sqlbulkcopy方法
var cp = new[] {
nameof(UserDocumentCategory.Id),
nameof(UserDocumentCategory.DocumentCategoryId),
nameof(UserDocumentCategory.UserId),
nameof(UserDocumentCategory.TenantId),
};
using(var sqlCopy = new SqlBulkCopy("server=localhost;port=3306;database=AppOne;user=root;password="")
{
sqlCopy.DestinationTableName = "[UserDocumentCategory]";
sqlCopy.BatchSize = 1000;
using(var reader = ObjectReader.Create(Input,cp))
{
sqlCopy.WriteToServer(reader);
}
}
我还有什么其他选择?
【问题讨论】:
-
很确定 SqlBulkCopy 是用于 Sql Server 的。仅仅几千次操作,20 分钟似乎太长了。
-
MySqlBulkLoader 有帮助吗?
-
我明白了。我会尝试 MySqlBulkLoader。我正在尝试减少时间。