在应用程序configuration文件中找不到名为“MyEntities”的连接string

我正在使用entity framework和ASP.NET MVC 4来构build一个应用程序

我的解决scheme分为两个项目。

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

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

在应用程序configuration文件中找不到名为“MyEntities”的连接string。

我想这个问题与连接string位于类库的app.config而不是MVC项目的事实有关。

有没有人有什么build议?

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

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

您需要将连接string复制到主项目configuration文件。

如果你的启动/主项目没有configuration文件(就像在我的控制台应用程序的情况下),只需添加一个(启动项目 – 添加新项目 – >应用程序configuration文件)。

更多的相关信息可以在这里find: MetadataException:无法加载指定的元数据资源

确保你的项目(使用DbContext)启动

在项目上点击右键并选择

要么

添加到在app.config(或web.config)中设置为启动连接string的项目中,

要么

像这样调用命令

Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

然后再试一次

你可以传递连接string到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... } 

如果在解决scheme中有多个项目,那么将setUp项目设置为已启动的地方,在App.config中有您的真相。

正如你猜测的那样,它是在类库的app.config中处理连接string的。

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

将连接string复制到已设置为“启动项目”的项目中的app.config或web.config文件中,如果在数据层中使用entity framework,则在主项目中安装entity frameworknuget。

如果启动项目更改没有 连接string的项目,也会发生这种情况。

  1. 右键单击解决scheme – 单击属性
  2. 在“通用属性”下,select启动项目
  3. 在右侧窗格中select具有连接string的项目(在大多数情况下,它将是MVC项目 – 启动解决scheme的项目)

是的,这很愚蠢。 您可以避免使用连接构build器来复制连接string。 VB.Net代码(在生产中使用,但在这里稍微修改,所以对待未经testing,高兴地协助解决任何问题),我有一个serverNamevariables,一个databaseNamevariables,我把它们传递给一个方法,并让它产生连接为了我:

  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) 

你在解决scheme上使用多个项目吗?

因为如果你是,你必须检查的webconfiguration是与de .edmx文件在同一个项目上的

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

我面临同样的问题。 我错过了将连接string放到启动项目,因为我正在执行从其他层的数据访问操作。 另外,如果您的启动项目中没有app.config,请添加app.config文件,然后将连接string添加到该configuration文件中。

在web.config文件中添加Connectoinstrnig

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

由包含.edmx文件的项目生成的连接string生成连接string,这似乎是从app.config文件复制到输出目录并由可执行文件引用以存储运行时configuration信息的文件的保留。

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

最简单的方法是将连接string从configuration文件复制到web.config文件的连接部分,并忽略configuration文件的内容。

我刚刚发现解决这个问题的最好方法是暂时将该项目(最有可能是类库)设置为启动项目。 这迫使软件包pipe理器控制台使用该项目作为它的configuration源。 这样设置的部分原因是因为econfig文件通常遵循的自上而下模型。 经验法则是最接近客户端的项目(例如MVC应用程序)是将要使用的web.config或app.config。

确保你已经把连接string放在启动项目的ROOT web.config中。

我知道我有点在这里明显,但它也发生在我身上 – 尽pipe我已经在我的MVC项目的Web.Config(.edmx文件被放置在一个不同的类库项目)的连接string,我couldn不知道为什么我总是得到一个exception……长话短说,我错误地将连接string复制到了Views \ Web.Config,这是一种疲倦和不滚动到底的奇怪组合解决scheme资源pipe理器场景。 是的,这些事情发生在老牌开发者身上:)

当您在项目中使用图层并在DataLayer中定义或安装entity framework并尝试运行您的项目时,会发生此问题

所以为了克服这个问题,从Edmx文件所在的层复制连接string,并在主web.config中粘贴连接string。

当我使用多个项目时,我遇到了这个问题,web.config和app.config启动项目为EntityFramework项目。

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

  1. 您需要启动的* .config文件中的连接string。
  2. 您需要将EntityFramework DLL安装到您的引用中

在引用类库的“container”MVC项目的根web.config文件中添加一个连接string,如下所示:

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

如果您不想使用“MyEntities”作为连接名称,请根据需要更改它,但在MyEntities DbContext类中进行以下更改:

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

这个错误的原因是,如果我们不指定连接string的名称或者在DbConext的派生类中连接string(在你的情况下它是MyEntities),那么DbContext会自动在根web.config文件中search连接stringwhoes名字是与派生类名相同(在你的情况下,它是我的实体)。