Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到实体-保存更改花费太多时间_C#_Linq_Entity Framework_Linq To Entities_Entity Framework 5 - Fatal编程技术网

C# LINQ到实体-保存更改花费太多时间

C# LINQ到实体-保存更改花费太多时间,c#,linq,entity-framework,linq-to-entities,entity-framework-5,C#,Linq,Entity Framework,Linq To Entities,Entity Framework 5,目前,我正在努力解决一个关于实体框架(LINQ到实体)的问题。大多数时候,当我尝试执行entity.SaveChanges()时,一切正常,但有时entity.SaveChanges()会花费太多时间和超时。我找了很多,但找不到答案 (根据公司政策,我不能将代码复制到其他地方。因此,我没有确切的代码,但我会尝试布局基本结构。我希望这能帮助您解决问题,但如果我没有,请告诉我。) 任务: 我的任务是扫描整个网络中的一些特定文件。将每个文件的内容与数据库的内容相匹配,并根据匹配结果使用文件的内容插入或

目前,我正在努力解决一个关于实体框架(LINQ到实体)的问题。大多数时候,当我尝试执行entity.SaveChanges()时,一切正常,但有时entity.SaveChanges()会花费太多时间和超时。我找了很多,但找不到答案

(根据公司政策,我不能将代码复制到其他地方。因此,我没有确切的代码,但我会尝试布局基本结构。我希望这能帮助您解决问题,但如果我没有,请告诉我。)

任务: 我的任务是扫描整个网络中的一些特定文件。将每个文件的内容与数据库的内容相匹配,并根据匹配结果使用文件的内容插入或更新数据库。我在网络上有大约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;    
}
public void performation()
{
DbTransaction tran=null;
entity.Connection.Open();//entity是一个声明为类似myDatabaseEntity entity=new myDatabaseEntity()的全局变量;
tran=entity.Connection.BeginTransaction();
foreach(路径列表中的字符串路径)
{
//返回1-数据库中的多个匹配项或
//2-数据库中的一个匹配文件或
//3-未找到匹配项。
int returnValue=SearchDatabase();
如果(返回值==1)
DoSomething();//所有插入/更新都能正常工作。保存更改也能正常工作。
else if(returnValue==2)
DoSomething();//同样,一切正常。保存更改在这里非常有效。
其他的
{
//此函数使用一些XML文件动态生成所有查询
//例如,插入表A(1,2,3);
GenerateInsertQueriesFromXML();
ExecuteQueries();
SaveChanges();找到了问题

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

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


实体框架是快速且无害的:D

如果您试图同时插入大量数据,请尝试将其拆分为多个
SaveChanges()
。但是,现在我们只能猜测您的问题是什么。您可能需要询问您的同事,他们可以查看您的代码。实际上,我在网络上为每个文件插入数据,然后关闭事务并为新文件启动一个新的事务。在每次迭代中,我只插入大约20次。事实上,EntityFramework并不是很流行批量插入的od。但是它看起来确实像你的
DbContext
是一个成员字段。你应该知道
DbContext
s应该尽快被处理掉,你不应该重复使用上下文。试着写一个存储过程……我也有同样的问题……最后我写了存储过程。@SanjooUthaiahBollera我不能立即转到存储过程。