我正在构建一个 .NET 断开连接的客户端-服务器应用程序,该应用程序使用 Entity Framework 5 (EF5) 从 POCO 生成 SQL Server CE 4.0 数据库。该应用程序允许用户将数据从网络 SQL Server 批量复制到客户端的 SQL Server CE 数据库中。由于 EF5 创建的约束和索引,这非常(非常)慢。暂时删除约束和索引会将 30 分钟的等待时间减少到 1 分钟或更短。
在开始大容量复制之前,应用程序执行查询以从 SQL Server CE 表中删除约束和索引。但是,这些命令会失败,因为 EF5 创建的约束名称包括表架构名称、点和表名称。由于解析问题,约束名称中的点导致 drop 命令失败。
例如,POCOCustomer
创建dbo.Customer
带有主键约束的表PK_dbo.Customer_Id
。数据库按预期执行。
但是,在执行非查询时:
ALTER TABLE Customer DROP CONSTRAINT PK_dbo.Customer;
SQL Server Compact ADO.NET 数据提供程序返回错误:
解析查询时出错。
[ 令牌行号 = 1,令牌行偏移量 = 57,错误令牌 = . ]
当然,使用DataContext
没有外键的辅助对象生成没有约束的数据库,然后再添加它们可以工作;但是,这需要维护两个DataContext
对象,并希望不要忘记保持更新。因此,我正在寻找两种解决方案之一:
编写 DROP 语句,使 . 字符被解析
阻止 EF5 使用 . 约束和索引名称中的字符
预先感谢您的帮助!