从NuGet获取EF 6以安装到F#项目中

9
我似乎无法在我的一些 F# 项目上安装 Entity Framework 6.0.1。这是我收到的错误消息:
执行脚本文件 'C:\source\payboard\PayboardWeb\packages\EntityFramework.6.0.1\tools\install.ps1'。 使用“2”个参数调用“SetData”时出错:“程序集“FSharp.ProjectSystem.Base, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的类型“Microsoft.VisualStudio.FSharp.ProjectSystem.Automation.OAProject”未标记为可序列化。” 位于 C:\source\payboard\PayboardWeb\packages\EntityFramework.6.0.1\tools\EntityFramework.psm1 的第 633 行字符:5 + $domain.SetData('project', $Project) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SerializationException
系统.NullReferenceException: 对象引用未设置为对象的实例。 在 System.Data.Entity.ConnectionFactoryConfig.InitializeEntityFrameworkCommand.Execute() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)

在EF6论坛上似乎有一个关于这个 bug 的开放问题(https://entityframework.codeplex.com/workitem/891),但据我所知,它并没有得到任何关注。

EF6在非F#项目上安装得非常好。

有什么建议的解决方法吗?


我认为在微软更改'Microsoft.VisualStudio.FSharp.ProjectSystem.Automation.OAProject'类型为可序列化之前,你很难有所作为。你可以在F#的用户反馈网站上提交此问题,看看是否会得到更多关注。我怀疑EF团队能否修复基础语言中的问题。 - Scott Wylie
1
如果你在EF团队的以下帖子评论中往下阅读,会发现有人从团队中回答了你关于EF何时支持F#的问题。不确定它是否有所帮助,但至少是官方承认。http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx - Scott Wylie
我查看了@ScottWylie的链接,发现提到了工作项891(https://entityframework.codeplex.com/workitem/891)。看起来F#在EF的下一个版本中可能会起作用。 - Dan Lyons
1个回答

5

这个问题在EF6.1中已经得到解决。这里是相关工作项。

需要注意的是,问题并不在EF本身,而是如何将包添加到您的项目中。这使我认为,在EF6.1发布之前,您可以通过获取该包并将EF6程序集的引用手动添加到项目中来解决此问题。然后,您需要相应地更新配置。(您还可以创建一个临时C#项目,添加EF6 NuGet包,这将提供EntityFramework和EntityFramework.SqlServer dlls,您可以将它们复制到您的F#项目中,并且还有一个配置文件,您可以从其中复制,这比自己找到正确的配置要容易得多)


我试图创建一个C#项目,它可以处理所有的数据库事务,但是当我尝试查询数据库时,EF无法连接到MySQL服务器,因为web.config没有正确配置,即使该C#项目中的app.config是正常的。这就是我要尝试的:将所有相关的EF配置从app.config转移到web.config,但你的解决方案似乎值得一试。这是你的50分哈哈。 - Ricardo Pieper
1
默认情况下,NuGet包会安装SqlServer提供程序并配置应用程序以使用SqlServer。如果您想使用MySql,则需要安装MySql提供程序并更改配置文件中的提供程序注册。 - Pawel
是的,我做了那个,但由于配置文件在另一个项目中,EF无法访问它。 - Ricardo Pieper
同样的错误已经通过这个答案得到了修复:https://dev59.com/XHvaa4cB1Zd3GeqPKPoD - radu florescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接