在我的一个项目上启用迁移时遇到了一个问题。我从Nuget控制台执行Enable-Migrations
命令,并收到一个错误:
Exception calling "SetData" with "2" argument(s): "Type
'Microsoft.VisualStudio.TeamArchitect.ModelingProject.ModelProjectAutomationObject' in assembly
'Microsoft.VisualStudio.TeamArchitect.ModelingProject, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At D:SolutionpackagesEntityFramework.5.0.0toolsEntityFramework.psm1:391 char:5
+ $domain.SetData('startUpProject', $startUpProject)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SerializationException
在此之前,有没有人能为我指明正确的方向。
环境:
.NET 4.5
实体框架5
Visual Studio 2012更新2
发现问题
问题是,我的解决方案中的启动项目是一个建模项目。出于某种原因,在我的项目上启用迁移时,模块会查看与启动项目相关的库。
将我的启动项目更改为解决方案中的测试项目,一切正常。
更新
确保启动项目包含要用于连接数据库的app.config
或web.config
文件。即使您的DbContext
位于不同的项目中,该文件也将用于生成迁移。您可以将包含DbContext
的项目设置为启动项目。
事实证明,当您使用代码优先迁移时,您必须在VS中指定一个启动项目,引用在其他地方定义迁移的项目,它将无法加载该项目。
(如果您在Visual Studio中使用代码优先迁移,如果解决方案的启动项目没有引用包含迁移的项目,则可能会发生这种情况。您可以更改解决方案的startUp项目,也可以使用-StartUpProjectName参数。)
为了防止其他人仍然有问题,我遇到了这个问题,因为我安装了Entity Framework 6和Entity Framework Core。我相信,仅仅运行命令就默认为EF6。在我用"EntityFrameworkCore/"作为命令的前缀后,它工作得很好。我不是这方面的专家,所以如果这是不正确的,我道歉。(例如"EntityFrameworkCore/")
尝试指定内容类型名称:
Enable-Migrations -ContextTypeName Web.Infrastructure.ContextName
如果解决方案中有多个项目,则必须指定要应用的项目。(控制台顶部的下拉菜单"DefaultProject")。
我也遇到了这个问题,并意识到它无法连接,因为启动web.config不包含EF配置详细信息。包含它的项目(数据层)具有所需的配置信息,但未使用该配置。只需从使用EF的配置文件中移动EF配置信息,并将其放入启动项目的配置中。对我很有帮助。