【问题标题】:Entity Framework Seeding with SqlCeBulkCopy returns error使用 SqlCeBulkCopy 的实体框架播种返回错误
【发布时间】:2015-08-22 13:14:55
【问题描述】:

我正在尝试为我的数据库添加约 50K 条目。我有两个数据库。 50K 条目将由 database2(Database2,基于 Database first 方法)上的一些查询/计算生成,然后将插入 database1(Database1,基于 code first 方法)。该过程相对较慢,即使有定期提交和上下文重新创建的提示(请参阅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);
            }
        }
    }
}

连接字符串如下:

/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 中的初始目录关键字似乎存在问题,但我不知道出了什么问题。有什么想法吗?

【问题讨论】:

    标签: c# sql-server entity-framework sql-server-ce connection-string


    【解决方案1】:

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

    【讨论】:

    • SqlBulkCopy 的问题是这个类没有 WriteToServer 方法,它像我的 List 一样采用 IEnumerable。 Database1 中的架构与 Database2 中的架构完全不同,因此我无法在两者之间定义 ColumnMappings(在我的情况下,它不仅仅是一个映射)。目前,对于我的具体问题,我看不到如何使用 DataRow[]、DataTable 或 DataReader 作为 SqlBulkCopy 中 WriteToServer 的可能参数。你能帮我解决这个问题吗?
    • 你可以在谷歌上找到一些解决方案,我使用了一个名为 Sailent.Data 的库,它将 List 转换为 DbDataReader
    • 谢谢,我找到了解决方案here。这该死的快:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多