【发布时间】:2015-08-25 18:01:17
【问题描述】:
当我想将多个用户导入我的数据库时,我在这里使用建议的方法:
Improving bulk insert performance in Entity framework
这是我的代码:
int countOfAddedUsers = 1;
int commitChunkSize = i_ChunkSize;
int numOfChunksCommited = 0;
foreach (var user in i_Users)
{
i_Progress.Report(m_SW.Elapsed.ToString(@"mm\:ss") + " (" + countOfAddedUsers.ToString("D5") + ") Adding user to chunk: " + user.Username + "..." + Environment.NewLine);
user.Roles.Add(UserRole);
context.Users.Add(user);
countOfAddedUsers++;
if (countOfAddedUsers % commitChunkSize == 0)
{
var chunkNumber = countOfAddedUsers / commitChunkSize;
writeUsersToDB(i_Progress, context, chunkNumber);
numOfChunksCommited++;
}
}
if (numOfChunksCommited == 0)
{
writeUsersToDB(i_Progress, context, 0);
numOfChunksCommited++;
}
现在我的问题是,在导入过程中,其中一个用户可能已经存在于数据库中或具有相同的username。
在这种情况下,我得到一个DBValidationException,并且整个“块”插入因为那个用户而被终止。
如何强制为每个用户单独插入语句,或者至少告诉 EF 在没有问题用户的情况下重试?
【问题讨论】:
-
这对你有用吗? context.Configuration.ValidateOnSaveEnabled = false;
-
nope .. 这仅检查数据注释验证,而不检查外键或唯一约束的 db 验证
标签: c# sql sql-server entity-framework