我使用实体框架 4.2(代码优先)将大量数据插入 SQL Server CE 4.0,与直接 SQL 插入相比,性能非常糟糕。
模型非常简单:
public class DocMember
{
public DocMember() { this.Items = new List<DocItem>(); }
public int Id { get; set; }
public string Name { get; set; }
public string MemberType { get; set; }
public string AssemblyName { get; set; }
public virtual IList<DocItem> Items { get; set; }
}
public class DocItem
{
public int Id { get; set; }
public DocMember Member { get; set; }
public string PartType { get; set; }
public string PartName { get; set; }
public string Text { get; set; }
}
我有 2623DocMembers
个和总共 7747 个DocItems
要插入,我得到以下执行时间:
With SQL: 00:00:02.8
With EF: 00:03:02.2
我可以理解 EF 有一点开销,但它比 SQL 慢65 倍!
也许我的代码有问题,但它非常简单,我看不出有什么问题:
private TimeSpan ImportMembersEF(IList<DocMember> members)
{
using (var db = new DocEntities())
{
db.Database.CreateIfNotExists();
var sw = Stopwatch.StartNew();
foreach (var m in members)
{
db.Members.Add(m);
}
db.SaveChanges();
sw.Stop();
return sw.Elapsed;
}
}
我还尝试调用SaveChanges
每个插入的项目,或者每 100 或 200 个项目,但无济于事(这实际上使情况变得更糟)。
有没有办法提高性能,还是我必须使用 SQL 进行批量插入?
编辑:为了完整起见,这里是 SQL 插入的代码:http: //pastebin.com/aeaC1KcB