Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表的快速映射和插入_C#_Entity Framework_Automapper - Fatal编程技术网

C# 表的快速映射和插入

C# 表的快速映射和插入,c#,entity-framework,automapper,C#,Entity Framework,Automapper,我正在加载一个对象列表,需要映射这些对象并将其存储回另一个数据库。这两个表没有相同的模式,因此需要进行映射。 例如: using (var db1 = new Db1()) { var customers = db1.CustomersDb1; using (var db2 = new Db2()) { foreach (var customer in customers) { var c = Mapper.Map

我正在加载一个对象列表,需要映射这些对象并将其存储回另一个数据库。这两个表没有相同的模式,因此需要进行映射。
例如:

using (var db1 = new Db1())
{
    var customers = db1.CustomersDb1;

    using (var db2 = new Db2())
    {
        foreach (var customer in customers)
        {
            var c = Mapper.Map<CustomerDb2>(customer);
            db2.customers.Add(c);
        }
        db2.SaveChanges();
    }
}
使用(var db1=new db1())
{
var customers=db1.CustomersDb1;
使用(var db2=new db2())
{
foreach(客户中的var客户)
{
var c=Mapper.Map(客户);
db2.customers.Add(c);
}
SaveChanges();
}
}
现在我用大约12000个条目测试了这段代码,它持续了2-3分钟,直到我到达db2.SaveChanges()。因此,在这段时间之后,我甚至没有存储任何内容。
Db2
中的
Customer
对象只有14个属性,所以我不知道它在哪里需要这么多时间

使用
实体框架
映射和复制两个表是否有更快的方法

编辑:

循环中需要的时间最多。所以这不是数据库的问题。如果我使用
automapper
或者我手动映射它也没有关系。

不要使用EF。只使用一条SQL语句

INSERT INTO Db1.Customers (ID, Value1, Value2)
SELECT NEWID(), Value1, Value2 FROM Db2.Customers

GO 

手动或与其他映射器映射可能重复,比较结果并选择最快的。@CodeCaster无论我如何映射,我编辑了我的问题。研究批量插入的替代方法(我不知道如何在EF离开头顶的情况下执行此操作)可能会使您受益。例如,
SqlBulkCopy
或者nhibernate与GuidComb组合使用无状态会话。我将假设大部分CPU时间用于跟踪/管理通过EF的12000个对象。@SimonWhitehead感谢您的评论。我调试并花时间。将对象添加到实体框架中会浪费很多时间。也许没有更快的解决方案。