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 数据库文件。
我正在尝试用大约 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 数据库文件。