【问题标题】:Entity Framework connecting to SQLEXPRESS not SQL Compact实体框架连接到 SQLEXPRESS 而不是 SQL Compact
【发布时间】:2012-10-03 09:50:44
【问题描述】:

我一直在尝试使用 SQl Compact 4.0 的代码优先 EF 项目。 当我尝试运行该项目时,我收到一个错误“数据库'master'中的CREATE DATABASE权限被拒绝。”。

我搜索了一些帮助并回复了一些博客,试图识别正在使用的连接字符串。令我惊讶的是

context.Database.Connection.ConnectionString    "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE"    string

即使我的 web.config 文件包含以下部分...

<connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0"    connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" /> 
</connectionStrings>

<system.data>
<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>

有谁知道为什么 EF 坚持创建与 SQLEXPRESS 而不是 SQL Compact 的连接? 我在解决方案的任何地方都找不到对 SQLEXPRESS 的引用。

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

    而不是使用以下内容将您的连接名称传递给 DBContext

    public YourContext() : base("DefaultConnection")
    {
    
    }
    

    使用名称指令

    public YourContext() : base("name=DefaultConnection")
    {
    
    }
    

    这将告诉 EF 将该参数用作连接。

    另外,在 web.config 的 connectionStrings 部分顶部添加“clear”可能会解决继承问题。

    【讨论】:

    • 对于 EF6,如果将 name 添加到上下文中,则会收到错误 "Connection with that name not found"
    【解决方案2】:

    在您的 web.Config 中查找 &lt;entityFramework&gt; 部分,那里应该有您的默认连接工厂:

      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/>
          </parameters>
        </defaultConnectionFactory>
      </entityFramework>
    

    如果您正在执行代码优先项目,您还可以更改默认构造函数以使用其他连接字符串:

    public YourContext() : base("name=DefaultConnection")
    {
    
    }
    

    【讨论】:

    • 部分如下...
    • 尝试使用您的连接字符串向您的 defaultConnectionFactory 添加一个值,或更改您的默认构造函数,使其针对您的其他连接字符串
    【解决方案3】:

    这篇博文介绍了如何做到这一点...

    http://blogs.msdn.com/b/davidobando/archive/2013/03/13/10339621.aspx

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多