【问题标题】:Entity Framework use model for different providers不同提供者的实体框架使用模型
【发布时间】:2010-10-17 21:27:39
【问题描述】:

我有一个实体 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=&quot;
Data Source=xxxx;
Initial Catalog=xxxx;User ID=xxxx;Password=xxxx;&quot;" 
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?

【问题讨论】:

    标签: .net entity-framework entity-framework-4


    【解决方案1】:

    除了换出连接字符串来支持不同的提供者之外,您还需要做更多的工作。本文介绍了如何支持多个提供商:

    Preparing an Entity Framework model for multi provider support

    本文介绍了对 VistaDB 和 SQL Server 的支持,但原则相同。

    【讨论】:

    • 做了一些工作,但我成功了。仍然无法将其作为资源加载。如果您要从 sqlserverCE 转到 sqlserver,则必须添加 Schema 属性。
    【解决方案2】:

    是的,我刚刚遇到了同样的问题 - 我们的应用程序使用 SQL Server,但单元测试是使用 SQL Server CE 执行的。我阅读了 Kev 提供的文章,并提出了一项自动化改进,以防止手动复制文件。

    假设“元数据工件处理”设置为“嵌入输出程序集”,您可以执行以下操作:

        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();
        }
    

    然后将连接字符串设置为:

    <add name="DomainDbContext" 
         connectionString="metadata=res://*/Entities.Entities.csdl|./Entities.Entities.ssdl|res://*/Entities.Entities.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=StraDaLB_DM.sdf&quot;" 
         providerName="System.Data.EntityClient" />
    

    希望有一天这对某人有所帮助;)

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2013-11-11
      相关资源
      最近更新 更多