首页 > 解决方案 > 实体框架 6:上下文在 Code First 模式下与从 EDMX 文件生成的代码一起使用

问题描述

我正在使用 Entity Framework 6 和数据库优先方法创建 WPF 应用程序。EF为我做了一切,我能够连接到数据库,到目前为止下载数据工作,所以连接存在。但是每次我添加用户控件时,它都会给我新的错误,即未检测到连接字符串。程序无论如何都可以正常工作,但是当您的错误窗口充满它时,它很难编程。

我发现从以下方面改变上下文:

public MediaRentalEntities()
     : base("name=MediaRentalEntities")
{
}

对此:

public MediaRentalEntities()
     : base("MediaRentalEntities")
{
}

应该解决这个问题,但它没有。现在它抛出异常(并多次显示此错误,基于我有多少用户控件,目前为 3):

上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果要创建自己的 DbConnection,请确保它是 EntityConnection 而不是其他类型的 DbConnection,并将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅此处的实体框架文档:http: //go.microsoft.com/fwlink/ ?LinkId=394715

这是我当前的 app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
  </startup>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="MediaRentalEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;data source=localhost;initial catalog=MediaRental;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

开始累了,我很想换成 EntityFrameworkCore 甚至是 Dapper,感觉 EntityFramework6 对用户不利,但 WPF 在 .NET Framework 上有更多功能。

标签: c#.netwpfentity-framework-6

解决方案


在连接字符串 中将 MyModel替换为“ MediaRentalEntities ”。它将起作用

或者

如果您首先使用 DB 生成它,那么您将已经拥有代码类似的上下文类

 public MyModel()
     : base("name=MyModel")
{
}

推荐阅读