具有相关实体的SQLBulkCopy(实体框架)

时间:2013-03-21 11:12:16

标签: c# .net sql-server-2008 entity-framework sqlbulkcopy

说我有以下实体。 (为简洁起见,重度简化,但包括关键属性)

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批量插入这些记录,但由于这不支持复杂类型(至少不是开箱即用),那么我试图找到其他潜力的解决方案。

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

编辑:在这种情况下,AsDataReader Extension method from MSDN会有帮助吗?

1 个答案:

答案 0 :(得分:1)

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

(我们从未真正对这些类进行编码,它们是使用来自xsd定义的1-10gb xml文件的xsd util生成的。当我们没有从同一个xsd生成类型化数据集时,我现在想回忆一下,但这似乎无关紧要你的问题。)

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

这是关于生成强类型数据集的link

这是example如何使用SqlBulkInsert。