我正在尝试使用EntityFramework.BulkInsert库来利用EF6和SqlBulkCopy。
文档看起来非常简单,但是,我无法将任何数据填充到数据库中。
对于一个复杂的例子,下面是代码:
public void WriteChunkNoAsync(int chunkCount, bool forceSave = false)
{
Chunking.Entities.Add(this);
if (forceSave || Chunking.Entities.Count % chunkCount == 0)
{
using (var db = new FlatESContainer())
{
//db.Entity.AddRange(Chunking.Entities); //This will work
db.BulkInsert(Chunking.Entities);
Chunking.Entities = new List<Entity>();
db.SaveChanges();
}
}
}这段代码基本上会插入到全局列表中,直到列表计数被chunckCount整除为止。
AddRange函数工作得很好。因此,我们决定创建一个非常简单的数据库,只有一个名为"Test“的表,下面是我们遇到的问题:
List<Test> tests = new List<Test>();
for (int i = 0; i < 1000; i++)
{
tests.Add(new Test());
}
using (var context = new SimpleContainer())
{
//This works fine
context.Tests.AddRange(tests);
//This causes an exception: Type 'TestSimpleDatabase.Test' is not found in context 'TestSimpleDatabase.SimpleContainer'
context.BulkInsert(tests);
context.SaveChanges();
}我相信这是两个独立的问题,但也许stackoverflow社区中的某些人知道为什么我们会有这个问题。
发布于 2014-08-27 09:12:06
因此,在尝试解决问题一段时间后,解决方案相当简单。同样的规则也适用于必须插入每个表的SqlBulkCopy,而不仅仅是引用了其他表的表(通过外键)。不过速度非常快!
发布于 2014-08-27 02:02:47
我能够通过创建一个Code First EF6项目来解决这个问题。这是一个解决方案,但模型优先将是很好的。
https://stackoverflow.com/questions/25510197
复制相似问题