【问题标题】:EntityFramework.BulkInsert issues inserting into databaseEntityFramework.BulkInsert 插入数据库的问题
【发布时间】:2014-10-20 00:53:33
【问题描述】:

我正在尝试使用 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 社区中的某个人知道我们为什么会遇到这个问题。

【问题讨论】:

  • 我也有同样的问题

标签: entity-framework bulkinsert sqlbulkcopy


【解决方案1】:

因此,在尝试解决问题一段时间后,解决方案相当简单。相同的规则适用于必须插入每个表的 SqlBulkCopy,而不仅仅是引用其他表的表(通过外键)。不过速度很快!

【讨论】:

  • 你能解释一下你的解决方案吗?
  • 这意味着在 EF 中您可以分配一个表示表的对象。问题在于,要使批量插入工作,您必须在执行任何类型的批量插入之前实际保存对您引用的表的更改。
  • 对不起,我不太明白你在这里的回答。我有一个名为Contacts 的主表,它的Id 列是另一个名为ContactExtras 的表中的外键。如何让 BulkInsert 知道我们正在处理外键?我已经在这里发布了我的问题:stackoverflow.com/questions/32225183/… 如果你能看一看,那就太好了。
  • @Pedram 我遇到的问题是带有 ID 的新条目尚未保存。因此,EF 不知道如何在不先保存新条目的情况下连接它们。因此,在您的情况下,如果您要批量插入 ContactExtras 表,则需要先保存联系人表上的更改,然后再将其分配给 ContractExtras。所以联系 bob = new Contact(); /*用新的联系人做事 */ db.SaveChanges(); //现在您可以在批量插入中引用该对象。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多