EntityFrameworkCore large Insert仅在调试模式下工作

时间:2016-08-15 20:10:07

标签: c# asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-webapi

我使用了插入代码 - 向下“ - 将示例数据插入到MS SQL DB中。 其中一个表 - 'downown' - (最后一个表插入'Records')有大插入,它在调试模式下需要5分钟但是当我尝试启动项目而没有调试时,表在DB和IIS-express中是空的没有抛出错误

数据有超过36,000行和超过40列

假设可能是因为“连接超时”

所以我试图寻找一个解决方案,找到两个没有一个解决方案:

1.连接字符串

Persist Security Info=False;Connect Timeout=1000;

2.Database.SetCommandTimeout

public MainContext()
    {
        //base.Database.SetCommandTimeout(1000);
    }

这里是插入代码

https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Models/SampleData.cs修改

    private static async Task AddOrUpdateAsync<TEntity>(
        IServiceProvider serviceProvider,
        Func<TEntity, object> propertyToMatch, 
        IEnumerable<TEntity> entities)
        where TEntity : class
    {
        Exception exp = null;
        using (var scope = serviceProvider
            .GetRequiredService<IServiceScopeFactory>()
            .CreateScope())
        using (var db = scope
            .ServiceProvider
            .GetService<MainContext>())
        using (var transaction = db.Database.BeginTransaction())
        {
            try
            {
                db.ChangeTracker.AutoDetectChangesEnabled = false;
                    db.Set<TEntity>().AddRange(entities);
                    db.SaveChanges();
                    transaction.Commit();
            }
            catch (Exception ex)
            {
                exp = ex;
                throw ex;
            }
        }

        if (exp != null)
        {
            throw exp;
        }
    }

0 个答案:

没有答案