1

假设我有以下实体。(为简洁起见进行了大幅简化,但包括了关键属性)

public  class Crime 
{

       [Key]
       public int CrimeId {get;set;}
       public virtual ICollection<Victim> Victims {get;set;}
       public virtual CrimeDetail Detail {get;set}

}

public class Victim
{
       [Key]
       public int VictimId {get;set;}
       public string VictimCategory {get;set;}
}

public class CrimeDetail
{
       [Key]
       public int id {get;set;}
       public string DetailText {get;set;}
}

我有 600,000+ 条记录要插入到 SQL Server 2008 Express R2 中,使用 Entity Framework 4.4 需要相当长的时间。

理想情况下,我想用SQLBulkCopy批量插入这些记录,但由于它不支持复杂类型(至少不是开箱即用),所以我试图找到其他一些潜在的解决方案。

如有必要,我愿意改变我的模型。

编辑:MSDN 中的 AsDataReader Extension 方法在这种情况下会有所帮助吗?

4

1 回答 1

1

当遇到同样的问题时,我们最终会使用 EF 生成代码优先的数据库和用于 SQLBulkCopy 的强类型生成数据集。

(我们从未真正编写过这些类,它们是使用 xsd 定义的 1-10gb xml 文件中的 xsd util 生成的。我现在正试图回想当我们没有从同一个 xsd 生成类型化数据集时,但这似乎与您的问题无关.)

根据您获取这 600k+ 记录的方式,您可以更改代码以使用生成的强类型数据集,或者使用一些对象到对象映射器将您的 EF POCO 对象映射到数据集,因为属性将被命名为相同。

这是一个关于生成强类型数据集的链接。

这是一个如何使用 SqlBulkInsert的示例。

于 2013-03-21T11:18:28.017 回答