Entity Framework 使用 SqlCeBulkCopy 做种 returns 错误

Entity Framework Seeding with SqlCeBulkCopy returns error

我正在尝试用大约 50K 个条目为我的数据库做种。我有两个数据库。 50K 条目将由一些 queries/calculations 在 database2(Database2,基于数据库优先方法)上生成,然后将被插入到 database1(Database1,基于代码优先方法)中。这个过程相对缓慢,即使有定期提交和上下文重建的提示(参见 here)。

备注:我知道我可以使用一些 SQL 构造将所需数据从 Database2 直接复制到 Database1,但是实体的创建有点复杂(排除,随机生成等)和 SQL 构造将非常复杂,如果可能的话我认为。因此绕过 EF.

所以我尝试像这样使用 SqlCeBulkCopy(参见 here):

public class DropCreateDatabaseAlwaysWithSeedData : DropCreateDatabaseAlways<MyContext>
{
    protected override void Seed(MyContext context)
    {
        using (var context2 = new MyContext2())
        {
            var testList = new List<MyEntity>();

            for (var i=0; i < 50000; i++)
            {
                // Some queries on context2 and calculations to get data
                testList.Add(new MyEntity());
            }
            using (var bcp = new SqlCeBulkCopy(context.Database.Connection.ConnectionString))
            {
                bcp.DestinationTableName = "MyEntity";
                bcp.WriteToServer(testList);
            }
        }
    }
}

连接字符串如下:

< add name="MyDatabase" connectionString="Data Source=PC\SQLSERVER;Initial Catalog=Database;integrated security=True;pooling=False;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

< add name="MyDatabase2" connectionString="metadata=res:///Initializers.DataModel.csdl|res:///Initializers.DataModel.ssdl|res://*/Initializers.DataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=PC\SQLSERVER;initial catalog=Database2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />

问题是我在 EntityFramework.dll 中得到了“System.ArgumentException”,因为不支持关键字“初始目录”。因此,连接字符串 MyDatabase 中的初始目录关键字似乎有问题,但我不知道出了什么问题。有什么想法吗?

使用 SqlBulkCopy(内置 System.Data.SqlClient 的一部分)而不是 SqlCeBulkCopy。 SqlCeBulkCopy 仅适用于填充 SQL Server Compact 数据库文件。