Entity Framework连接到SQLEXPRESS而不是SQL Compact

10

我一直在尝试使用SQL Compact 4.0进行Code First 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的引用。

3个回答

3

不要使用以下方式将连接名传递给DBContext

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

}

使用name指令。
public YourContext() : base("name=DefaultConnection")
{

}

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

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


对于EF6,如果在上下文中添加name,您会得到一个错误提示:“未找到该名称的连接”。 - user3402754

2
在您的web.Config中查找<entityFramework>部分,它应该有您的默认连接工厂:
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

如果你正在进行一个Code First项目,你也可以修改默认构造函数来使用其他连接字符串:
public YourContext() : base("name=DefaultConnection")
{

}

<entityFramework>部分如下所示... <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> </entityFramework> - Tony Bater
尝试在defaultConnectionFactory中添加一个值,该值应为您的连接字符串,或者修改默认构造函数以便将其指向其他连接字符串。 - Mark Oreta

1

感谢您发布答案!请注意,您应该在此网站上发布答案的基本部分,否则您的帖子可能会被删除请参阅FAQ中提到的“几乎只是链接”的答案。 如果您愿意,仍然可以包含链接,但仅作为“参考”。答案应该独立存在,不需要链接。 - Taryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接