Исправление «Основной поставщик не удалось открыть.» - PullRequest
0 голосов
/ 28 января 2019

Мое приложение заполняет dbcontext некоторыми данными - это занимает очень много времени (около 14-20 часов).Если метод GetWorskpace () получает данные успешно, то вызывается метод DeleteModel.DeleteModelInDb () - этот метод удаляет все данные в БД.После удаления dbcontext сохраняется с новыми данными.

Я получаю следующую ошибку в этой строке кода

DeleteModel.DeleteModelInDb(del);

System.Data.Entity.Core.EntityException: «Основной поставщик не удалось открыть».TimeoutException: Время транзакции

и

TransactionException: операция недопустима для состояния транзакции.

Мой код:

static void Main(string[] args)
    {

        PdmContext db = new PdmContext();

        Thread.CurrentThread.CurrentCulture = new CultureInfo("cs-CZ");

        Application pdApplication = new Application();
        PdWSP.Workspace pdWorkspace = (PdWSP.Workspace)pdApplication.ActiveWorkspace;
        pdWorkspace.Load("H:\\workspace_dummy.sws");

        using (var scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(100, 0, 0))) //100 hours            
        {
            GetWorkspace((pdWorkspace as PdWSP.WorkspaceFolder), db); //fills dbcontext - takes about 14 hours


            using (var del = new PdmContext())
                {
                    DeleteModel.DeleteModelInDb(del);

                }
                db.SaveChanges();
                scope.Complete();
        }          

        db.Dispose();

    }

Мой класс DeleteModelInDb:

public static class DeleteModel
{
    public static void DeleteModelInDb(PdmContext del)
    {

        string nspace = "PdmExporter.Models";
        List<string> items = new List<string>();

        var q = from t in Assembly.GetExecutingAssembly().GetTypes()
                where t.IsClass && t.Namespace == nspace

                select t;

        var list = q.ToList();

        foreach (var item in list)
        {
            items.Add("dbo.[" + item.Name + "]");
        }


        foreach (var i in items)
        {
            del.Database.ExecuteSqlCommand("truncate table " + i + ";"); 
            del.Database.ExecuteSqlCommand("DBCC CHECKIDENT('" + i + "', RESEED, 1)");
        }
        del.SaveChanges();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...