LINQ to Entities- SaveChanges需要花费太多时间

时间:2014-07-17 16:53:24

标签: c# linq entity-framework linq-to-entities entity-framework-5

目前,我正在努力解决有关实体框架(LINQ to Entities)的问题。大多数时候,当我尝试执行entity.SaveChanges()时,一切正常,但在某些时候,entity.SaveChanges()占用太多和超时。我搜索了很多,但无法找到答案。

(根据公司政策,我不能在其他地方复制代码。所以,我没有确切的代码,但我会尝试布局基本结构。我希望它可以帮助你找出问题,但如果我没有&# 39;然后让我知道。)

任务: 我的任务是扫描整个网络中的某些特定文件。将每个文件的内容与数据库的内容进行匹配,并根据匹配将数据库插入或更新为文件的内容。我在网络上有大约3000个文件。

问题:

public void PerformAction()
{
    DbTransaction tran = null;
    entity.Connection.Open();    //entity is a global variable declared like myDatabaseEntity entity = new myDatabaseEntity();
    tran = entity.Connection.BeginTransaction();

    foreach(string path in listOfPaths)
    {
       //returns 1 - Multiple matching in database OR
       // 2 -  One matching file in database OR
       // 3 -  No Matching found.
       int returnValue = SearchDatabase();      

       if(returnValue == 1)
          DoSomething(); //All inserts/updates work perfectly. Save changes also works correctly.
       else if(returnValue == 2)
          DoSomething(); //Again, everything ok. SaveChanges works perfectly here.
       else
       {
           //This function uses some XML file to generate all the queries dynamically
           //Forexample INSERT INTO TABLEA(1,2,3);
           GenerateInsertQueriesFromXML();

           ExecuteQueries();

           SaveChanges(); <---- Problem here. Sometimes take too much time.
       }
       //Transaction commit/rollback code here
    }    
}


public bool ExecuteQueries()
{
   int result = 0;
   foreach(string query in listOfInsertQueries)
   {
      result = entity.ExecuteStoreCommand(query); //Execute the insert queries

      if(result <=0)
        return false;
   }

   entity.TestEntityA a = new entity.TestEntityA();
   a.PropertyA = 123;
   a.PropertyB = 345;
   //I have around 25 properties here

   entity.AddToTestEntityA(a);

   return true;    
}

1 个答案:

答案 0 :(得分:0)

发现了这个问题。

我插入所有数据的主表在INSERT和DELETE上有一个触发器。

因此,每当我在主表中插入一些新数据时,触发器就会在后端触发,并且一直在占用。

实体框架是FAST和INNOCENT:D