ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue – 编译器想要引用7.0.0.0,但未找到

我有相同的问题。 我在project.json文件中添加了以下依赖项:

 "dependencies": { "EntityFramework": "7.0.0-beta4", "EntityFramework.Core": "7.0.0-rc1-final", "EntityFramework.SqlServer": "7.0.0-beta8", "EntityFramework.Commands": "7.0.0-rc1-final" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }, ... 

我用dnu install EntityFrameworkdnu install EntityFramework.SqlServer来安装软件包。 "EntityFramework": "7.0.0-beta4",由安装程序本身自动编写在dependencies节点下。

问题/问题1:令我惊讶的是,当我为EntityFramework提供智能时,我提供的可用版本仅为6.1.3

问题2:当我使用dnu build编译我的应用程序时(我在dependencies节点下手动添加EntityFramework程序集( .Core.Commands )后运行了dnu restore命令)我收到了一堆编译错误:

 The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'. D:\Projects\aspnet\apiservice\Models\SampleData.cs(12,41): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments D:\Projects\aspnet\apiservice\Models\SampleData.cs(13,32): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments D:\Projects\aspnet\apiservice\Models\SampleData.cs(14,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) D:\Projects\aspnet\apiservice\Models\SampleData.cs(15,42): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) D:\Projects\aspnet\apiservice\Models\SampleData.cs(17,43): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) D:\Projects\aspnet\apiservice\Models\SampleData.cs(19,45): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) D:\Projects\aspnet\apiservice\Models\SampleData.cs(22,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) D:\Projects\aspnet\apiservice\Models\SampleData.cs(61,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) 

如果我删除.Core.Commands程序集引用项目构建正常。

然后我将EntityFramework.Core的版本更改为EntityFramework.Core ,如错误中所述:

 The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'. 

dnu restore现在给了我以下内容:

 Unable to locate Dependency EntityFramework.Core >= 7.0.0 Writing lock file D:\Projects\aspnet\apiservice\project.lock.json Restore complete, 6675ms elapsed Errors in D:\Projects\aspnet\apiservice\project.json Unable to locate Dependency EntityFramework.Core >= 7.0.0 

我是asp.net 5 Visual Studio code平台的新手。 我不能使用Visual Studio 2015因为开发团队的其他成员正在使用OSX。

这对我来说是一个学习项目。 要求非常简单。 连接SQL Server数据库,使用Entity Framework提取master-child关系数据。

搞砸了! 救命!!

提前致谢

UPDATE

  1. 对于版本为7.0.0-rc1-final所有软件包,我可以看到project.json的主要更改。 我使用Yeoman生成器工具来创建项目,但看起来你通过Visual Studio更正了包。 那么,我是否必须手动更新软件包版本并restore它们?

  2. 当项目由Yeoman创建/生成时,默认情况下没有添加global.json文件。 我可以手动添加并手动放入代码吗? 这会有用吗?

  3. 我还可以看到一些额外的包引用被添加到project.json文件中,默认情况下,Yeoman生成器没有添加它们 – 如Microsoft.AspNet.Tooling.RazorMicrosoft.Extensions.Logging.ConsoleMicrosoft.Extensions.Logging.DebugMicrosoft.Extensions.Logging等它们是否都在项目中有效使用? 因为生成器没有自动添加它们,我是否可以手动添加它们并使用dnu restore ? 如果我手动添加它会对项目产生任何影响吗?

您应该从依赖项中删除 "EntityFramework" (删除"EntityFramework": "7.0.0-beta4" )并使用

 "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final", "EntityFramework.Commands": "7.0.0-rc1-final" 

只要。 如果由于以下依赖项添加了"EntityFramework.Core": "7.0.0-rc1-final"则无需显式添加"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"

 "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final": "EntityFramework.Relational": "7.0.0-rc1-final": "EntityFramework.Core": "7.0.0-rc1-final" 

我的意思是EntityFramework.MicrosoftSqlServer需要EntityFramework.Relational ,它需要EntityFramework.Core

您还应validationglobal.json包含"sdk": { "version": "1.0.0-rc1-update1" }

更新 :我检查了你上传的测试项目。 它有很多小问题。 我修改了它。 您可以在此处下载修改后的项目。 不要忘记修复appsettings.json使用的ConnectionString ,它包含我在我用过的Server

最重要的变化是使用更简单的BookContext.cs

 using Microsoft.Data.Entity; namespace apiservice.Models { public class BookContext : DbContext { public DbSet Authors { get; set; } public DbSet Books { get; set; } } } 

使用以下SampleData.cs

 using System; using System.Linq; using Microsoft.Data.Entity; using Microsoft.Extensions.DependencyInjection; namespace apiservice.Models { public static class SampleData { public static void Initialize(IServiceProvider serviceProvider) { var context=serviceProvider.GetService(); context.Database.Migrate(); if (!context.Books.Any()) { var austen = context.Authors.Add( new Author { LastName = "Austen", FirstName = "Jane" }).Entity; var dickens = context.Authors.Add( new Author { LastName = "Dickens", FirstName = "Charles" }).Entity; var cervantes = context.Authors.Add( new Author { LastName = "Cervantes", FirstName = "Miguel" }).Entity; context.Books.AddRange( new Book { Title = "Pride and Prejudice", Year = 1813, Author = austen, Price = 9.99M, Genre = "Comedy of manners" }, new Book { Title = "Northanger Abbey", Year = 1817, Author = austen, Price = 12.95M, Genre = "Gothic parody" }, new Book { Title = "David Copperfield", Year = 1850, Author = dickens, Price = 15, Genre = "Bildungsroman" }, new Book { Title = "Don Quixote", Year = 1617, Author = cervantes, Price = 8.95M, Genre = "Picaresque" } ); context.SaveChanges(); } } } } 

project.json与以下dependencies部分的用法:

 { "dependencies": { "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final", "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", "Microsoft.Extensions.Logging": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", "Microsoft.Extensions.DependencyInjection": "1.0.0-rc1-final", "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final", "EntityFramework.Commands": "7.0.0-rc1-final", "System.Net.Http": "4.0.1-beta-23516", "Microsoft.Net.Http": "2.2.29", "Newtonsoft.Json": "8.0.1" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }, "frameworks": { "dnx451": { }, "dnxcore50": { } } } 

修复appsettings.json来自

 { "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Verbose", "System": "Information", "Microsoft": "Information" }, "Data": { "DefaultConnection":{ "ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;" } } } } 

 { "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Verbose", "System": "Information", "Microsoft": "Information" } }, "Data": { "DefaultConnection": { "ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;" } } } 

Data 不应该在Logging

以及以下Startup.cs的用法

 using apiservice.Models; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Data.Entity; namespace apiservice { public class Startup { public static IConfigurationRoot Configuration {get; set;} public Startup(IHostingEnvironment env) { // Set up configuration sources. var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]) ); services.AddMvc(); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); // we need to execute the following two commands before // dnu restore // dnx ef migrations add Initial // dnx ef database update // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859 try { using (var serviceScope = app.ApplicationServices.GetRequiredService() .CreateScope()) { serviceScope.ServiceProvider.GetService() .Database.Migrate(); } } catch { } app.UseIISPlatformHandler(); app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); SampleData.Initialize(app.ApplicationServices); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run(args); } } 

我在Configure方法的注释中写道,应该执行命令

 dnx ef migrations add Initial dnx ef database update 

恢复所有包后。 dnx ef migrations add Initial将在项目中使用20160101205609_Initial.csBookContextModelSnapshot.cs等文件创建其他Migrations文件夹。 appsettings.json定义的数据库将由dnx ef database update创建,并且在与程序分叉期间将填充来自SampleData.cs测试数据。

顺便说一句,我将package.json移动到包文件夹中(与project.json处于同一级别)。 您不使用这些包,但该移动使得npm包在Visual Studio中可见和管理。