目前,我正在努力解决有关实体框架(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;
}
答案 0 :(得分:0)
发现了这个问题。
我插入所有数据的主表在INSERT和DELETE上有一个触发器。
因此,每当我在主表中插入一些新数据时,触发器就会在后端触发,并且一直在占用。
实体框架是FAST和INNOCENT:D