我有一个实体4.0模型,它使用SqlServerCE数据库作为其提供者。在服务器上,我想使用相同的项目,只需将连接字符串切换为使用实际的SqlServer数据库。
这是我的连接字符串
<add name="Entities"
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;
provider=System.Data.SqlClient;
provider connection string="
Data Source=xxxx;
Initial Catalog=xxxx;User ID=xxxx;Password=xxxx;""
providerName="System.Data.EntityClient" />
当我尝试查询实体模型时,出现以下错误:
SqlCeCommand.CommandTimeout does not support non-zero values.
如果我将上下文超时设置为0,则表示
Unable to cast object of type 'System.Data.SqlClient.SqlConnection'
to type 'System.Data.SqlServerCe.SqlCeConnection'.
如何将提供程序从SqlServerCE设置为SqlClient?
答案 0 :(得分:4)
除了交换连接字符串以支持不同的提供者之外,您还需要做更多的工作。本文介绍了如何支持多个提供程序:
Preparing an Entity Framework model for multi provider support
本文涵盖了对VistaDB和SQL Server的支持,但适用相同的原则。
答案 1 :(得分:3)
是的,我刚遇到同样的问题 - 我们的应用程序使用SQL Server,但使用SQL Server CE执行单元测试。我已经阅读了Kev提供的文章,并提出了一项自动化改进措施,以防止手动复制文件。
假设“元数据工件处理”设置为“嵌入输出程序集”,您可以执行以下操作:
library(dplyr)
library(ggplot2)
is_outlier <- function(x) {
return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}
mtcars %>%
group_by(cyl) %>%
mutate(outlier = ifelse(is_outlier(drat), drat, as.numeric(NA))) %>%
ggplot(., aes(x = factor(cyl), y = drat)) +
geom_boxplot() +
geom_text(aes(label = outlier), na.rm = TRUE, hjust = -0.3)
然后将连接字符串设置为:
public void SetupOnce()
{
var assembly = typeof(TContext).Assembly;
var ssdlRes = assembly.GetManifestResourceNames().Single(e => e.EndsWith("ssdl")); //TODO handle multiple contexts
using (var stream = assembly.GetManifestResourceStream(ssdlRes))
using (var reader = new StreamReader(stream))
{
var result = reader.ReadToEnd().Replace("Provider=\"System.Data.SqlClient\"", "Provider=\"System.Data.SqlServerCe.4.0\"");
File.WriteAllText(ssdlRes, result);
}
Context = new TContext();
}
希望有一天能帮到某人;)