在应用程序配置文件中找不到名为“MyEntities”的连接字符串

时间:2012-09-27 13:22:27

标签: c# entity-framework asp.net-mvc-4

我正在使用实体框架和ASP.NET MVC 4来构建应用程序

我的解决方案分为两个项目;

  • 包含我的数据模型(.edmx)文件和一些自定义接口的类库
  • 引用上面的类库的'容器'MVC项目

我的问题是,当我尝试使用'MyEntites' DbContext 时,我收到以下错误:

  

在。中找不到名为'MyEntities'的连接字符串   应用程序配置文件。

我想这个问题与连接字符串位于类库的app.config而不是MVC项目中有关。

有人有任何建议吗?

28 个答案:

答案 0 :(得分:297)

尝试将连接字符串复制到MVC项目中的.config文件。

答案 1 :(得分:135)

你是对的,这是因为类库(.edmx文件所在的位置)不是你的启动/主项目。

您需要将连接字符串复制到主项目配置文件中。

如果您的启动/主项目没有配置文件(就像在我的控制台应用程序案例中那样)只需添加一个(启动项目 - 添加新项目 - >应用程序配置文件)。

更多相关信息可在此处找到: MetadataException: Unable to load the specified metadata resource

答案 2 :(得分:88)

确保您将项目(使用DbContext)作为启动

on the project right click and select

OR

添加到app.config(或web.config)中设置为启动连接字符串的项目

OR

像这样调用命令

_.filter(array1, function(obj){ return !_.findWhere(array2, obj); });

然后再试一次

答案 3 :(得分:29)

您可以将连接字符串传递给EntityFramework并继续您的生活:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}

答案 4 :(得分:8)

如果您在解决方案中有多个项目,那么setUp项目已经启动,您可以获得真实的App.config。

答案 5 :(得分:8)

正如你猜测的那样,它是连接字符串在类库的app.config中。

将条目从app.config类复制到容器的app.configweb.config文件

答案 6 :(得分:6)

将连接字符串复制到项目中的app.config或web.config文件,该文件已设置为&#34;设置为StartUp Project&#34;如果在数据层使用实体框架,请在主项目中安装实体框架nuget。

答案 7 :(得分:5)

如果启动项目更改 连接字符串,也会发生这种情况。

  1. 右键单击解决方案 - 单击属性
  2. 在“公共属性”下,选择“启动项目”
  3. 在右侧窗格中选择项目 有连接字符串(在大多数情况下,它将是MVC项目 - 启动解决方案的项目)

答案 8 :(得分:4)

  1. 添加App.Config文件
  2. 将项目设置为启动项目。
  3. 确保在entityFramework部分之后添加连接字符串:

    <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    
    </configSections>
    
    <connectionStrings>
       <!-- your connection string goes here, after configSection -->
    </connectionString>
    

答案 9 :(得分:3)

是的,这太傻了。您可以避免使用连接构建器复制连接字符串。 VB.Net代码(在生产中使用,但在这里稍作修改,因此视为未经测试,很乐意协助解决任何问题),其中我有一个serverName变量,一个databaseName变量,我将它们传递给一个方法并让它生成连接对我来说:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)

答案 10 :(得分:2)

您在解决方案中使用多个项目吗?

因为如果你是,你必须检查的web配置是与de .edmx文件在同一项目中的那个

答案 11 :(得分:1)

将ConnectionString添加到MVC Project Web.config文件

答案 12 :(得分:1)

当我使用多个proyects时,我遇到了这个问题,开始使用web.config和app.config实现EntityFramework项目。

为了避免这个问题,你必须:

  1. 您需要已启动的* .config文件中的连接字符串。
  2. 您需要将EntityFramework DLL安装到参考

答案 13 :(得分:1)

我遇到了同样的问题。当我从其他层执行数据访问操作时,我错过了将连接字符串放到启动项目中。如果您在启动项目中没有app.config,那么添加app.config文件,然后将连接字符串添加到该配置文件。

答案 14 :(得分:0)

在AutoCAD插件中尝试使用EF时出现此错误。 CAD插件从acad.exe.config文件获取连接字符串。如上所述,将连接字符串添加到acad配置文件中,即可使用。

信用从ADN.Network转到Norman.Yuan。

答案 15 :(得分:0)

如果您使用的是MVVM模型,请尝试将连接字符串复制到项目的所有部分。

例如,如果您的解决方案包含两个项目,即类库项目和wpf项目,则必须复制后端项目的连接字符串(库类porject),并将副本放置在wpf的App.config文件中项目。

<connectionStrings>
  <add name="DBEntities" ... />
</connectionStrings>

希望对您有帮助:)

答案 16 :(得分:0)

@RyanMann在the top answer上有一条评论建议:

  

将连接字符串存储在一个配置文件中,然后通过<connectionString configSource="../ProjectDir/SharedConnections.config" />

在其他项目中引用它们

这是一个很棒的建议!

它还可以在App.config和Web.config文件之间共享连接字符串!

任何想遵循此建议的人,都应该前往this SO answer。 对于在解决方案中的多个项目之间共享连接字符串,它提供了非常好的分步指南。

唯一的警告是configSource必须存在于同一目录或子目录中。上面的链接说明了如何使用“添加为链接”解决此问题。

答案 17 :(得分:0)

这是因为您的上下文类是从DbContext继承的。我猜你的ctor是这样的:

public MyEntities()
    : base("name=MyEntities")

name=...应该更改为您的connectionString的名称

答案 18 :(得分:0)

这也可能导致调用代码中引用的dll引用不足。一个小的笨拙的hack可以节省您的时间。

我遵循DB First方法,并在DAL类库项目中创建了EDMX文件,并且它引用了BAL类库,而WAL服务又引用了BAL类库。

由于我在BAL中遇到此错误,因此我尝试了上述方法从DAL项目的App.config中复制配置详细信息,但没有解决。最终,我只是在朋友的提示下,向WCF项目中添加了一个虚拟EDMX文件(具有相关的DB Connectivity等),因此它导入了所有必要的内容,然后我删除了EDMX文件,并且摆脱了这个问题。干净的构建。

答案 19 :(得分:0)

我得到这个结果的原因是没有将项目设置为启动,如另一个答案所示。我对此的贡献-在执行Add-Migrations和Update-Database时,在Nuget Package Manager控制台中将启动项目指定为命令的一部分(不包括'['或']'字符,这只是为了向您显示需要将此处的文本更改为您的项目名称):

  1. 启用迁移
  2. Add-Migrations -StartupProject [您的包含数据上下文类的项目名称]
  3. Update-Database -StartupProject [与上面相同的项目名称]

应该这样做。

答案 20 :(得分:0)

定期迁移

有两个选项 - 这里的每个人都建议的第一个选项是确保连接字符串位于项目的Web.config文件中。使用Azure应用程序设置中的连接字符串时,这意味着使用Azure值覆盖Web.config值。

Azure或自动迁移(程序化)

如果您以编程方式运行迁移,则可以使用第二个选项,它允许您使用动态获取的连接字符串(或通过Azure应用程序设置)运行迁移,而无需将其存储在Web中的.config:

设置配置 TargetDatabase 时,请使用 DbConnectionInfo 构造函数,该构造函数接受连接字符串和提供程序名称,而不是仅带有连接名称的构造函数。如果您的连接字符串没有提供者名称并且您正在使用SQL Server / Azure SQL,那么请使用&#34; System.Data.SqlClient&#34;

答案 21 :(得分:0)

运行MSTest时出现此问题。没有“noisolation”标志,我无法让它工作。

希望这有助于某人。花了我很多时间来弄清楚这一点。 IDE中的一切运行良好。在这种情况下,实体框架有些奇怪。

答案 22 :(得分:0)

在&#39;容器&#39;的根web.config文件中添加连接字符串。引用类库的MVC项目如下:

 <connectionStrings>

  <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />

  </connectionStrings>

如果您不想使用&#34; MyEntities&#34;作为连接名称,然后根据需要进行更改,但在MyEntities DbContext类中进行以下更改:

MyEntities: DbContext
 {
   public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
 }

此错误的原因是,如果我们不指定连接字符串的名称或在DbConext的派生类中连接字符串(在您的情况下是MyEntities),则DbContext将自动在根web.config文件中搜索连接字符串whoes name与派生类名相同(在您的情况下,它是My Entities)。

答案 23 :(得分:0)

当您在项目中使用图层并在DataLayer中定义或安装实体框架工作并尝试运行您的项目时,会发生此问题

因此,要解决此问题,请从Edmx文件所在的层复制连接字符串,并将连接字符串粘贴到主web.config中。

答案 24 :(得分:0)

确保已将连接字符串放在启动项目的ROOT web.config中。

我知道我在这里说得很明显,但它也发生在我身上 - 虽然我已经在我的MVC项目的Web.Config中有了连接字符串(.edmx文件被放置在另一个类库项目中)我无法弄清楚为什么我会一直得到例外...... 简而言之,我错误地将连接字符串复制到了Views \ Web.Config,这是一个奇怪的组合,包括疲倦和不滚动到底层的解决方案 - 资源管理器场景。 是的,这些事情也发生在经验丰富的开发人员身上:))

答案 25 :(得分:0)

我发现解决此问题的最佳方法是暂时将该项目(很可能是类库)设置为启动项目。这会强制程序包管理器控制台将该项目用作其配置源。它以这种方式设置的部分原因是因为econfig文件通常遵循的自顶向下模型。经验法则是最接近客户端的项目(例如MVC应用程序)是将使用的web.config或app.config。

答案 26 :(得分:0)

由包含.edmx文件的项目生成的连接字符串生成连接字符串,这似乎是来自app.config文件的保留,这些文件被复制到输出目录并由可执行文件引用以存储运行时配置信息。

这会破坏Web项目,因为没有自动进程将随机.config信息添加到Web项目的web.config文件中。

最简单的方法是将连接字符串从配置文件复制到web.config文件的connections部分,并忽略配置文件内容。

答案 27 :(得分:-2)

在web.config文件中添加Connectoinstrnig

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too"  ></ConnectionStiring>