【发布时间】:2018-03-02 19:02:27
【问题描述】:
我正在开发一个 Web API 和实体框架 6,它在任何给定时间将 500 条以下的记录“批量”插入到 Microsoft SQL Server 表中。 DbContext.SaveChanges() 方法将在几秒钟内将所有记录插入表中,因此没有问题。但是,当调用该方法以将相同数量的记录插入到同一个表中并附加一个半扩展触发器时,该过程可能需要很多分钟。触发器调用了一些表连接并插入到其他表中,然后删除了新插入的记录。
我对表或触发器没有太多控制权,因此我正在寻找有关如何提高性能的建议。我提出了将触发器移动到存储过程并让触发器调用存储过程的建议,但我不确定这是否会有所收获。
编辑:据我所知,我的问题有点笼统,我会发布一些代码以防万一。 SQL 不是我的,所以我会看看我能实际发布什么。
这是我的 Web API 方法中调用 SaveChanges() 的部分:
string[] stringArray = results[0].Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
var profileObjs = db.Set<T_ProfileStaging>();
foreach (var s in stringArray)
{
string[] columns = s.Split(new[] {",", "\t"}, StringSplitOptions.None);
if (columns.Length == 6)
{
T_ProfileStaging profileObj = new T_ProfileStaging();
profileObj.CompanyCode = columns[0];
profileObj.SubmittedBy = columns[1];
profileObj.VersionName = columns[2];
profileObj.DMName = columns[3];
profileObj.Zone = columns[4];
profileObj.DMCode = columns[5];
profileObj.ProfileName = columns[6];
profileObj.Advertiser = columns[7];
profileObj.OriginalInsertDate = columns[8];
profileObjs.Add(profileObj);
}
}
try
{
db.SaveChanges();
return Ok();
}
catch (Exception e)
{
return Content(HttpStatusCode.BadRequest, "SQL Server Insert Exception");
}
【问题讨论】:
-
所以用户真的没有什么可以为你提供的。您没有提供 c# 或 SQL 代码,所以我们无事可做。
标签: sql-server entity-framework triggers