带有 dnx 项目的 EF 6

Posted

技术标签:

【中文标题】带有 dnx 项目的 EF 6【英文标题】:EF 6 with a dnx project 【发布时间】:2016-04-29 14:33:51 【问题描述】:

我有一个用于实体框架的新 ASP.net 5 dnx 类库。我需要以 EF 6 为目标,因为我需要的某些功能不在 EF 7 中。

首先,EF 工具(如 enable-migration)不存在。我添加了一个老式类库并安装了 EF 6,现在命令就在那里。

当我运行启用迁移时,我收到此错误:

PM> 启用迁移

使用“2”个参数调用“SetData”的异常:“类型 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' 在程序集'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, 版本=14.1.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 是 未标记为可序列化。”在 D:\Projects\Rebus\FMS\Code\Current\FMSSupport\FMSSupport\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:720 字符:5 + $domain.SetData('startUpProject', $startUpProject) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException +fullyQualifiedErrorId:SerializationException System.NullReferenceException:对象引用未设置为实例 的一个对象。在 System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(项目 项目,Int32 shellVersion)在 System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebProject(项目 项目)在 System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(字符串 configurationTypeName, Boolean useContextWorkingDirectory) 在 System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(字符串 contextTypeName) 在 System.Data.Entity.Migrations.EnableMigrationsCommand.c__DisplayClass2.<.ctor>b__0() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作 command) 对象引用未设置为对象的实例。

我尝试了不同的启用迁移选项,例如指定启动项目或 contextTypeName。

有什么想法吗?

【问题讨论】:

我用一个普通的 ASP.NET 项目得到了这个...... 呵呵,“启动”引起了我的注意。我将 web 项目设置为启动项目,然后它工作了:D 您找到解决方案了吗?我想要 EFCore 目前不支持的 ComplexType 支持。 ATM 我正在​​考虑必须手动展开复杂类型才能使用 EFCore :( @Raskolnikov 这个问题并不是很有用。 DNX 已经死了。您应该使用 .NET Core CLI 升级到 ASP.NET Core 的发布版本。项目格式发生了很大变化,这使得这个问题的答案与任何事情都无关紧要,因为工具不再存在并且你无法重现任何东西。 .Net Core 1.0 上的同样问题 【参考方案1】:

遵循此recommendation,EF6 数据项目应使用现有的 .NET Framework 类库 csproj 类型。

即使遵循了建议,我仍然遇到同样的错误。卸载您的 ASP.NET Core 项目,然后在适当的 csproj 上调用 Enable-Migrations 命令应该允许该命令执行。您可以通过右键单击 .NET Core 项目并选择“卸载项目”选项来卸载项目。还应注意,包管理器控制台窗口有一个“默认项目:”下拉选项。您应该选择带有 DbContext 的项目。

【讨论】:

【参考方案2】:

这是因为 ASP.NET Core 引入了新的项目类型/配置系统(请参阅 package.config vs project.json),而旧的 EF 工具不知道如何使用新系统(project.json)。如果您想返回 EF6,创建一个新项目并将代码移植到其中可能是最简单的方法。

有趣的是(好吧,实际上令人失望)他们在 project.json 上回溯,请参阅: http://xoofx.com/blog/2016/05/11/goodbye-project-json/

【讨论】:

【参考方案3】:

我有同样的问题。只需将启动项目从 ASP.NET Core 设置到我的 .NET Framework Lib 就可以了 =) 现在我可以像往常一样执行 EF6 迁移“Add-Migration”命令...

附:对不起我的英语。

【讨论】:

以上是关于带有 dnx 项目的 EF 6的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net 5 项目中启用迁移(EF6)?

带有 EF 6 的 MySql 连接器

ASP.NET 5 项目未正确定位 .NET 4.6.1 且无法调试

实体框架探查器 - 带有 EF 6 的 ASP.NET MVC4 - 无法确定提供程序名称

在 DNX 项目中,如何以 Xamarin Android 为目标?

json VS南希项目DNX项目由YO创建