2016-01-01 1 views
10

У меня такая же проблема. Я добавил следующие зависимости в моем project.json файле:ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue - компилятор хочет иметь ссылку 7.0.0.0, которая не найдена

"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 EntityFramework и dnu install EntityFramework.SqlServer для установки пакетов. "EntityFramework": "7.0.0-beta4", был написан под узлом dependencies автоматически самим установщиком.

Вопрос/вопрос 1: к моему удивлению, когда я тянул в intellisence для EntityFramework, доступная версия, которую я представляю, только 6.1.3!

Выпуск 2: Когда я компиляция моего приложения с помощью dnu build (я побежал dnu restore команды после добавления EntityFramework сборок (.Core и .Commands) вручную под dependencies узлом я получаю кучу ошибок компиляции:

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 в 7.0.0.0, как указано в сообщении об ошибке:

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 5Visual Studio code платформы. И я не могу использовать Visual Studio 2015, так как другие члены команды разработчиков используют OSX.

Это учебный проект для меня. Требование довольно прямолинейно. Подключите базу данных SQL Server, потяните master-child реляционные данные, используя Entity Framework.

Навинчивается! Помогите!!

Заранее спасибо

UPDATE

  1. я могу увидеть основные изменения в project.json для всех пакетов с версией 7.0.0-rc1-final. Я использовал генератор Yeoman для создания проекта, но, похоже, вы исправили пакет через Visual Studio. Итак, мне нужно обновить версию пакета вручную и restore?

  2. Когда проект был создан/создан Yeoman, файла global.json не было добавлено. Могу ли я добавить это вручную и поместить код внутри вручную? Будет ли это работать?

  3. Я могу также увидеть некоторые дополнительные ссылки пакетов добавляются project.json файла, которые не были добавлены по умолчанию генератора Yeoman - как Microsoft.AspNet.Tooling.Razor, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging и т.д., все они эффективно используются в проекте? Поскольку генератор не добавил их автоматически, опять же, могу ли я добавить их вручную и восстановить с помощью dnu restore? Будет ли это иметь какое-либо влияние на проект, если я добавлю их вручную?

+0

Пожалуйста, не используйте фрагменты кода, если они не работают. –

ответ

14

Вы должны удалить"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.

Необходимо также проверить, что global.json содержит "sdk": { "version": "1.0.0-rc1-update1" }.

ОБНОВЛЕНО: Я рассмотрел тестовый проект, который вы загрузили. У него было много мелких проблем. Я изменил его. Вы можете загрузить измененный проект here. Не забудьте исправить ConnectionString, используемый в appsettings.json, он содержит Server, который я использовал для меня.

Наиболее важные изменения являются использование более простого BookContext.cs:

using Microsoft.Data.Entity; 

namespace apiservice.Models { 
    public class BookContext : DbContext { 
     public DbSet<Author> Authors { get; set; } 
     public DbSet<Book> 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<BookContext>(); 
      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<BookContext>(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<IServiceScopeFactory>() 
        .CreateScope()) 
       { 
        serviceScope.ServiceProvider.GetService<BookContext>() 
         .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<Startup>(args); 
    } 
} 

я писал в комментарии внутри Configure метода, который следует выполнить команды

dnx ef migrations add Initial 
dnx ef database update 

после все пакеты будут восстановлены. dnx ef migrations add Initial создаст дополнительную папку Migrations в проекте с файлами типа 20160101205609_Initial.cs и BookContextModelSnapshot.cs. База данных, определенная в appsettings.json, будет создана dnx ef database update, и она будет заполнена тестовыми данными от SampleData.cs во время разветвления с программой.

Кстати, я переместил package.json внутри папки пакета (на том же уровне, что и project.json). Вы используете пакеты не, но движение делает видимыми пакеты npm и управление в Visual Studio.

+0

Если я правильно понял, у меня есть следующее: '" EntityFramework.Relational ":" 7.0.0-rc1-final ", " EntityFramework.MicrosoftSqlServer ":" 7.0.0-rc1-final ", " EntityFramework. MicrosoftSqlServer.Design ": "7.0.0-rc1-финал", "EntityFramework.Commands": "7.0.0-rc1-финал"' ошибки компиляции придумывают являются: '... не-родовое метод 'IServiceProvider.GetService (Type)' не может использоваться с аргументами типа ... Не общий метод 'IServiceProvider.GetService (Type)' не может использоваться с аргументами типа –

+0

Я забыл спросить, я не могу найти глобальный. json в моем дереве проектов. Это веб-API, который я разрабатываю с помощью VS Code и проекта, созданного с использованием генератора Yeoman. –

+0

@NiladriSarkar: Не могли бы вы включить ** полный 'project.json' **, который вы используете в настоящее время. Это было бы в основном просто, если вы загрузили где-нибудь свой тестовый проект, и я мог бы скомпилировать его на своем компьютере. Что я имею в виду в своем ответе, что вам ** не нужно ** включать «EntityFramework.Core» и «EntityFramework.Relational», если вы включили «EntityFramework.MicrosoftSqlServer»: «7.0.0-rc1-final» ' - автоматически загружаются зависимости «EntityFramework.MicrosoftSqlServer». – Oleg

Смежные вопросы