EntityFramework.BulkInsert问题插入数据库

时间:2014-08-26 15:58:05

标签: entity-framework bulkinsert sqlbulkcopy

我正在尝试使用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社区中的某个人对我们遇到此问题的原因有所了解。

2 个答案:

答案 0 :(得分:1)

因此,经过一段时间尝试解决问题后,解决方案相当直接。相同的规则适用于必须插入每个表的SqlBulkCopy,而不仅仅是具有对其他表的引用的表(通过外键)。虽然很快!

答案 1 :(得分:-1)

我能够通过创建Code First EF6项目来解决这个问题。这是一个解决方案,但模型首先会很好。