尝试将 DbSet<TEntity>.Where() 与 EF7 和 ASP.NET5 一起使用

Attempting to use DbSet<TEntity>.Where() with EF7 and ASP.NET5

我已经使用 ASP.NET 5 MVC6 项目和一些 class 库创建了一个解决方案。我正在使用 Visual Studio 2015,我的目标是 "dnxcore50" 和 "net451"。

在 class 库中,我正在使用 EF7 编写存储库代码。在 class 中,我尝试在 DbSet<> 上使用一些方法。即“.Where(...)”、“.Single(...)”和“.First(...)”。这些在旧版本的 .NET 上可用。

我收到以下 2 个错误:

.NET Framework 4.5.1 error CS0012: The type 'IEnumerable<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

.NET Framework 4.5.1 error CS0012: The type 'Func<,>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

似乎在 DNXCORE50 格式下构建没有问题,但不是 .NET 的完整 4.5.1 版本。

我在 project.json 文件中有这个:

"frameworks": {
    "net451": {
      "dependencies": {
        "System.Runtime": "4.0.21-beta-23516"
      }
    },
    "dnxcore50": {
      "dependencies": {
        "System.Runtime": "4.0.21-beta-23516"
        ......
      }
    }
  }

我的目标是 1.0.0-rc1-final DNX SDK 版本。

有什么想法吗?

好的,我想我终于弄清楚了原因。如果您创建 class 库,则 project.json 文件具有:

 "net451": { },

在 "frameworks" 部分。如果我将其更改为:

"dnx451": { },

然后就可以了。我不是 100% 确定这是否会影响其他任何事情。但我现在就用它。

对于其他答案,我们仍然可以通过添加 "System.Runtime"

使用 net451

"net451": {
      "frameworkAssemblies": {
        "System.Runtime": ""
      }
    }