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





entity-framework asp.net-mvc-4 (19)


你可以将连接字符串传递给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...
}

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

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

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

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

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

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

有没有人有什么建议?




是的,这很愚蠢。 您可以避免使用连接构建器复制连接字符串。 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)



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




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

因为如果你是这样,你必须检查的web配置是与de .edmx文件相同的项目




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

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



  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>
    



在web.config文件中添加Connectoinstrnig

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



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

由于没有自动过程将随机.config信息添加到web项目的web.config文件中,所以这在Web项目中断了。

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




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

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

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



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

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

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

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




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




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




运行MSTest时遇到此问题。 如果没有“noisolation”标志,我无法让它工作。

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




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

要么

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

要么

像这样调用命令

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'

然后再试一次




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

我知道我有点在这里明显,但它也发生在我身上 - 虽然我已经在我的MVC项目的Web.Config中存在连接字符串(.edmx文件被放置在不同的类库项目中),并且我不能不知道为什么我总是得到一个异常......长话短说,我错误地将连接字符串复制到了Views \ Web.Config,这是一种疲倦和不滚动到底的奇怪组合解决方案资源管理器场景。 是的,这些事情发生在经验丰富的开发人员身上:)




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




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




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

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




实体框架在身份字段方面确实存在一些问题。

您无法在现有表上添加GUID标识

迁移:不检测对DatabaseGeneratedOption的更改

反向工程不会将具有默认NEWSEQUENTIALID()的GUID键标记为存储生成的标识

这些都没有完全描述您的问题,并且额外迁移中的Down()方法很有趣,因为当初始迁移中的CREATE TABLE似乎设置它时,它似乎试图从列中删除IDENTITY!

此外,如果您使用Update-Database -ScriptUpdate-Database -Verbose来查看从这些AlterColumn方法运行的sql,您将看到sql在UpDown是相同的,并且实际上什么都不做。 IDENTITY保持不变(对于当前版本 - EF 6.0.2及更低版本) - 如我链接的前两个问题所述。

我认为您应该删除额外迁移中的冗余代码,并暂时使用空迁移。 您可以订阅/投票支持要解决的问题。

参考文献:

更改IDENTITY选项确实蹲下了

使用自定义迁移操作打开/关闭标识







c# entity-framework asp.net-mvc-4