实体框架代码优先:启用迁移错误

Posted

技术标签:

【中文标题】实体框架代码优先:启用迁移错误【英文标题】:Entity Framework Code First: Enable-Migrations error 【发布时间】:2013-08-02 12:36:16 【问题描述】:

这应该是关于在包管理器控制台中第一次为实体框架代码优先运行Enable-Migrations 命令时参数使用的一个非常基本的问题。以下是我的解决方案的分离方式:

我有一个名为 MyMvcApp.DomainEntities 的项目,其中包含我的域实体 POCO 类及其存储库的接口。 我有一个名为 MyMvcApp.DataModeling 的项目,其中包含 EF 参考(DbContext、存储库实现)。 最后,我有一个 MyMvcApp.Web 项目,它是 MVC4 项目,并且在 web.config 中还包含 EF 连接字符串(到本地 SQL Server DB)。

当我运行 Enable-Migrations 时,我收到一个令人讨厌的错误:

无法加载程序集“MyMvcApp.DataModeling”。 (如果您在 Visual Studio 中使用 Code First 迁移,如果您的解决方案的启动项目未引用包含您的迁移的项目,则可能会发生这种情况。您可以更改解决方案的启动项目或使用 -StartUpProjectName 参数。)

我似乎遍历了“默认项目名称”(包管理器控制台下拉菜单)的所有排列,并添加 -ProjectName 无济于事。 (我的解决方案的启动项目是 MVC 项目仅供参考)。

鉴于我是如何分离我的项目的,我如何让Enable-Migrations 命令工作?

【问题讨论】:

您是否在解决方案中配置了项目依赖项?您的迁移在您的数据建模项目中,对吗? 是的,所有的类引用都在那里并且解决方案构建。尚未创建任何迁移,因为我无法启用迁移,但是是的,我希望它们位于 MyMvcApp.DataModeling 项目中。 您是否尝试过“Enable-Migrations -StartUpProjectName MyMvcApp.Web”? 您是否选择了 .DataModeling 作为 Package Manager Console 中的默认项目? 这两件事我都做了。我发现了问题,现在会回答。 【参考方案1】:

事实证明,问题在于您绝对需要一个 App.config 文件,其中包含您的项目中的连接字符串,并使用 DbContext 类来启用迁移。就我而言,这是 MyMvcApp.DataModeling 项目。我想我可以通过在我的 Enable-Migrations 控制台命令中添加 -StartUpProjectName 'MyMvcApp.Web' 参数来使用 MVC 项目的 Web.config 文件中的连接字符串,但这似乎不起作用。

不管怎样,如果您只是想生成数据库而不启用迁移,那么您的 DataModeling 项目中不需要 App.config。您只需将以下代码行添加到您的 Global.asax 文件并运行您的应用程序:

using (var context = new EntityContext())

    context.Database.Initialize(false);

【讨论】:

我认为这里还有其他工作,因为我正在使用迁移并且我的 .Data 在任何地方都没有连接字符串,连接字符串在 .Web 项目中并且迁移工作得很好. 您能否提供一个示例 app.config 文件?尝试启用迁移,但始终失败。根据您的回复,这可能会解决它,但如果没有示例文件,我不知道如何正确设置它

以上是关于实体框架代码优先:启用迁移错误的主要内容,如果未能解决你的问题,请参考以下文章

无法使用实体框架代码优先创建具有凭据的数据库?

如何为实体框架代码优先迁移设置隔离级别

实体框架代码优先 - 初始代码迁移不起作用

实体框架迁移错误 - 序列不包含任何元素

实体框架迁移 NuGet 错误

了解实体框架启用迁移和上下文