EF 5.0 枚举类型未生成

4

背景 我在一台安装了.NET 4.5的机器上使用VS 2010,我读过.NET 4.5是一个原地安装(覆盖了.NET 4.0版本)。

我的项目仍然针对.NET 4.0,但是因为.NET 4.5是一个原地安装,所以没有4.5选项也没关系。然后我通过NuGet安装了EntityFramework-pre,但是当我运行Upgrade-Database -Script命令时,它不会生成枚举属性。

然后我发现了这个。我尝试从头开始做所有的事情,但仍然添加了EntityFramework 4.4而不是5.0。所以我手动更改了所有引用,使其指向5.0版本以确保我有EF 5.0版本。所有内容都已编译。

问题 当我运行

Enable-Migrations -EnableAutomaticMigrations

我得到了"在当前项目中未找到从DbContext派生的类。编辑生成的Configuration类以指定要启用迁移的上下文。"

因此,我手动确保我的类是正确的,如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<DataContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

DataContext是DbContext的子类。

当我运行时,

Update-Database -Script

我遇到了“在程序集'MyProject'中找不到迁移配置类型。(在Visual Studio中,您可以使用Package Manager Console中的Enable-Migrations命令来添加迁移配置)”的问题。
我已经创建了包含上述配置类的MyProject,并在Package Manager Console中选择了包含Migrations文件夹和Configuration类的项目。 问题:
  1. 如何确保通过nuget安装EnittyFramework时添加的是5.0版本而不是4.4版本,即使我已安装.Net 4.5?

  2. 如果无法解决上述问题,我该如何确保Upgrade-Database输出脚本?

1个回答

7

Entity Framework 5.0尚未发布。有预发布版本,但需要特别启用预发布版本才能在NuGet中显示它们。

然而,请记住,EF 5.0不会像在.NET 4.5中支持.NET 4.0中的所有内容一样。是的,.NET 4.5覆盖了.NET 4.0,但如果您的项目在VS2010中,则会配置为构建.NET 4.0,而不是.NET 4.5。它不能假定.NET 4.5功能,因为结果需要在没有.NET 4.5的系统上运行。毕竟,您的目标是.NET 4.0,并且枚举支持不在您从NuGet获取的EntityFramework DLL中,而是在作为.NET运行时一部分的System.Data.Entity DLL中,因此无法在.NET 4.0中添加。您可以安装Visual Studio Beta以创建针对.NET 4.5的应用程序。

简而言之:“被告知由于4.5是原地安装,所以可以使用”——不,对于你的目的来说这是不可行的。

感谢您的评论。我遵循了Scott Hanelman关于使用<compilation debug="true" strict="false" explicit="true" targetFramework="4.5">重新定位.net框架到4.5的博客文章。您是在说我应该升级到VS 11吗? - TimJohnson
@gsogoly 是的,VS 2010不支持.NET 4.5。在Web应用程序中设置targetFramework="4.5"意味着您的.NET 4.0开发的应用程序将在.NET 4.5上运行,但它仍然是一个.NET 4.0开发的应用程序,并且您实际上并没有获得任何.NET 4.5的好处(除了可能存在的现有方法的错误修复)。 - user743382
我靠,我有Win2k8 R2 32位版本,但VS11失败了,因为它不是64位的。难道没有其他方法可以在VS10上针对.NET 4.5吗? - TimJohnson
@gsogoly 在32位系统上,VS11应该可以正常工作,我自己在Win7上使用它。但我不确定是否可以在Windows Server上安装它。但是为了回答你的问题,有一些技巧可以让VS2010接受.NET 4.5,但这涉及欺骗VS,让它认为它实际上是.NET 4.0的变体,并且它与NuGet不兼容(NuGet也会将其视为未识别的.NET 4.0变体,并且无法安装包),所以这对于你使用Entity Framework来说是不可行的。 - user743382
@gsogoly 而且,唯一可行的方法是使用一个黑客技巧:VS2010 SP1 将.NET 4.5 列入黑名单,拒绝打开任何以它为目标的项目。 - user743382

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