Мое приложение заполняет 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();
}
}