when i want to import multiple users into my DB i use a suggested method here:
Improving bulk insert performance in Entity framework
here is my code:
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++;
}
Now my problem is that during import one of the users may already exists in the DB or have the same username
.
in that case i get a DBValidationException
and the entire "Chunk" insert is terminated because of that one user.
how can i force separate insert statements for every user or at least tell EF to retry without the problematic user ?