首先为 EF 6 代码应用迁移 - 未找到上下文类型
Apply Migrations for EF 6 Code First - no context type was found
我正在处理 WCF .NET Framework 4.8 项目,它的 WCF 在控制台应用程序中自托管。
我已经在 WCF 控制台应用程序引用的它们自己的独立项目中设置了定义的 POCO classes 和 DbContext
。
我已经在主控制台应用程序的 app.config 中为 DbContext
声明了 连接字符串 。
当我尝试执行 EnableMigrations
和 Add-Migration
等 EF Code First 命令时,它们无法执行并出现错误:
No context type was found in the assembly 'MAL.App.ConsoleHost'
控制台应用程序App.Config
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="AppDbContext" connectionString="Data Source=MySQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
数据Class图书馆
public class AppDbContext: DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<AlbumType> AlbumTypes { get; set; }
public DbSet<Artist> Artists { get; set; }
}
一个 POCO class
public class Album
{
public Guid AlbumID { get; set; }
public string AlbumName { get; set; }
public Guid ArtistID { get; set; }
public Guid AlbumTypeID { get; set; }
public int Stock { get; set; }
public Artist Artist { get; set; }
public AlbumType AlbumType { get; set; }
}
控制台主程序
static void Main(string[] args)
{
ServiceHost hostMusicService = new ServiceHost(typeof(MyWebServices));
hostMusicService.Open();
Console.WriteLine("Web Services Started. Press [Enter] To Exit ");
Console.ReadLine();
hostMusicService.Close();
}
当您的 DbContext 在与主 运行time 不同的项目中定义并且主 运行time 设置为 Default Project[=44= 时,会发生此错误] 在解决方案中。
首次打开包管理器控制台时,它假定解决方案 默认项目 是您要对其执行命令的项目,例如 Enable-Migrations
.
您可以更改解决方案的默认项目,但更简单的解决方法是将包管理器控制台中的默认项目更改或设置为包含您的项目的项目AppDbContext
定义,因为这是您希望在其中管理 Migrations 的项目。
这里有一个问题,仍然将 Solution 中的 Default Project 作为您的控制台应用程序。
- 解决方案 默认项目 不仅仅是当您按 F5 到 运行 时将执行的项目,这是任何时候使用的项目 Visual Studio 需要在 运行 时间访问 app/web 配置文件。
- 这与使用 EDMX 设计界面的 EF 的早期版本相同,甚至在使用 DataSet 设计器之前,默认项目 配置文件中的连接字符串也是如此设计时使用的 VS。
您还可以使用大多数 EF CLI 命令的 -ProjectName
参数来传递项目名称,而不是使用默认名称。为简洁起见,我通常将此保留用于存在多个具有上下文的项目的场景,或者尤其是当同一项目中有多个上下文时。您不希望每次 您想要 Add-Migration
或 Update-DataBase
或任何其他像这样的脚手架命令时 都键入项目名称。
要获取有关受支持参数的信息,请在控制台中的命令后使用 -?
开关:
PM> Enable-Migrations -?
NAME
Enable-Migrations
SYNOPSIS
Enables Code First Migrations in a project.
SYNTAX
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] [-ConnectionStringName <String>]
[-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] -ConnectionString <String>
-ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
DESCRIPTION
Enables Migrations by scaffolding a migrations configuration class in the project. If the
target database was created by an initializer, an initial migration will be created (unless
automatic migrations are enabled via the EnableAutomaticMigrations parameter).
RELATED LINKS
REMARKS
To see the examples, type: "get-help Enable-Migrations -examples".
For more information, type: "get-help Enable-Migrations -detailed".
For technical information, type: "get-help Enable-Migrations -full".
PM>
我找到了答案。您需要在迁移中添加数据 Class 库项目名称,如下所示;
- Enable-Migrations -ProjectName MyContextProjectNameHere -StartUpProjectName MyStartUpProjectNameHere -Verbose
- add-migration Initial -ProjectName MyContextProjectNameHere
- update-database -ProjectName MyContextProjectNameHere
试试这个命令可能会有帮助。
EntityFrameworkCore\enable-migrations
我正在处理 WCF .NET Framework 4.8 项目,它的 WCF 在控制台应用程序中自托管。
我已经在 WCF 控制台应用程序引用的它们自己的独立项目中设置了定义的 POCO classes 和 DbContext
。
我已经在主控制台应用程序的 app.config 中为 DbContext
声明了 连接字符串 。
当我尝试执行 EnableMigrations
和 Add-Migration
等 EF Code First 命令时,它们无法执行并出现错误:
No context type was found in the assembly 'MAL.App.ConsoleHost'
控制台应用程序App.Config
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="AppDbContext" connectionString="Data Source=MySQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
数据Class图书馆
public class AppDbContext: DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<AlbumType> AlbumTypes { get; set; }
public DbSet<Artist> Artists { get; set; }
}
一个 POCO class
public class Album
{
public Guid AlbumID { get; set; }
public string AlbumName { get; set; }
public Guid ArtistID { get; set; }
public Guid AlbumTypeID { get; set; }
public int Stock { get; set; }
public Artist Artist { get; set; }
public AlbumType AlbumType { get; set; }
}
控制台主程序
static void Main(string[] args)
{
ServiceHost hostMusicService = new ServiceHost(typeof(MyWebServices));
hostMusicService.Open();
Console.WriteLine("Web Services Started. Press [Enter] To Exit ");
Console.ReadLine();
hostMusicService.Close();
}
当您的 DbContext 在与主 运行time 不同的项目中定义并且主 运行time 设置为 Default Project[=44= 时,会发生此错误] 在解决方案中。
首次打开包管理器控制台时,它假定解决方案 默认项目 是您要对其执行命令的项目,例如 Enable-Migrations
.
您可以更改解决方案的默认项目,但更简单的解决方法是将包管理器控制台中的默认项目更改或设置为包含您的项目的项目AppDbContext
定义,因为这是您希望在其中管理 Migrations 的项目。
这里有一个问题,仍然将 Solution 中的 Default Project 作为您的控制台应用程序。
- 解决方案 默认项目 不仅仅是当您按 F5 到 运行 时将执行的项目,这是任何时候使用的项目 Visual Studio 需要在 运行 时间访问 app/web 配置文件。
- 这与使用 EDMX 设计界面的 EF 的早期版本相同,甚至在使用 DataSet 设计器之前,默认项目 配置文件中的连接字符串也是如此设计时使用的 VS。
您还可以使用大多数 EF CLI 命令的 -ProjectName
参数来传递项目名称,而不是使用默认名称。为简洁起见,我通常将此保留用于存在多个具有上下文的项目的场景,或者尤其是当同一项目中有多个上下文时。您不希望每次 您想要 Add-Migration
或 Update-DataBase
或任何其他像这样的脚手架命令时 都键入项目名称。
要获取有关受支持参数的信息,请在控制台中的命令后使用 -?
开关:
PM> Enable-Migrations -?
NAME
Enable-Migrations
SYNOPSIS
Enables Code First Migrations in a project.
SYNTAX
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] [-ConnectionStringName <String>]
[-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] -ConnectionString <String>
-ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]
DESCRIPTION
Enables Migrations by scaffolding a migrations configuration class in the project. If the
target database was created by an initializer, an initial migration will be created (unless
automatic migrations are enabled via the EnableAutomaticMigrations parameter).
RELATED LINKS
REMARKS
To see the examples, type: "get-help Enable-Migrations -examples".
For more information, type: "get-help Enable-Migrations -detailed".
For technical information, type: "get-help Enable-Migrations -full".
PM>
我找到了答案。您需要在迁移中添加数据 Class 库项目名称,如下所示;
- Enable-Migrations -ProjectName MyContextProjectNameHere -StartUpProjectName MyStartUpProjectNameHere -Verbose
- add-migration Initial -ProjectName MyContextProjectNameHere
- update-database -ProjectName MyContextProjectNameHere
试试这个命令可能会有帮助。
EntityFrameworkCore\enable-migrations