ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue - 컴파일러에서 찾을 수없는 7.0.0.0을 참조하려고합니다.

asp.net asp.net-core c# dnu entity-framework-core

문제

나는 같은 문제를 겪고있다. 내 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 EntityFramework 사용 dnu install EntityFramework.SqlServer 를 설치하고 dnu install EntityFramework.SqlServer 를 설치하여 패키지를 설치합니다. "EntityFramework": "7.0.0-beta4", 는 설치 프로그램 자체에서 dependencies 노드 아래에 자동으로 작성되었습니다.

Issue / Question 1 : 내가 EntityFramework 에 대한 EntityFramework 가져 왔을 때 놀랍게도, 내가 발표 할 수있는 버전은 6.1.3 에 불과합니다!

문제 2 : dnu build 사용하여 응용 프로그램을 컴파일 할 때 ( dependencies 노드에서 수동으로 .Core.Commands ) EntityFramework 어셈블리를 추가 한 후 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 의 버전을 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 5 Visual Studio code 플랫폼의 초보자입니다. 개발팀의 다른 구성원이 OSX를 사용하고 있기 때문에 Visual Studio 2015 를 사용할 수 없습니다.

이것은 나를위한 학습 프로젝트입니다. 요구 사항은 매우 간단합니다. SQL Server 데이터베이스를 연결하고 Entity Framework를 사용하여 master-child 관계형 데이터를 가져옵니다.

망했다! 도움!!

미리 감사드립니다.

최신 정보

  1. 버전 7.0.0-rc1-final 가진 모든 패키지에 대한 project.json 의 주요 변경 사항을 확인할 수 있습니다. Yeoman 생성기 도구를 사용하여 프로젝트를 만들었지 만 Visual Studio 통해 패키지를 수정 한 것처럼 보입니다. 그렇다면 수동으로 패키지 버전을 업데이트하고 restore 해야합니까?

  2. 프로젝트가 Yeoman에 의해 생성 / 생성되었을 때 기본적으로 global.json 파일이 추가되지 않았습니다. 이 코드를 수동으로 추가하고 코드를 직접 넣을 수 있습니까? 이게 효과가 있니?

  3. Yeoman 생성기에서 기본적으로 추가하지 않은 project.json 파일에 추가 패키지 참조가 추가 된 것을 볼 수 있습니다 (예 : Microsoft.AspNet.Tooling.Razor , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging 등이 모두 프로젝트에서 효과적으로 사용되고 있습니까? 생성기가 자동으로 추가하지 않았기 때문에 수동으로 추가하고 dnu restore 사용하여 dnu restore 있습니까? 수동으로 추가하면 프로젝트에 어떤 영향을 미칩니 까?

수락 된 답변

의존성에서 "EntityFramework"제거 해야 합니다 ( "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.MicrosoftSqlServer": "7.0.0-rc1-final" 을 추가 한 경우 "EntityFramework.Core": "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" } 가 포함되어 있는지 확인해야합니다 "sdk": { "version": "1.0.0-rc1-update1" } .

업데이트 : 업로드 한 테스트 프로젝트를 검토했습니다. 그것은 많은 작은 문제가있었습니다. 나는 그것을 수정했다. 여기 에서 수정 된 프로젝트를 다운로드 할 수 있습니다. appsettings.json 에서 사용 된 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(); 
            }
        }
    }    
}

다음 dependencies 부분을 ​​가진 project.json 의 사용법 :

{
  "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;"
    }
  }
}

( DataLogging 되어서는 안됨 )

및 다음 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 Initial20160101205609_Initial.csBookContextModelSnapshot.cs 와 같은 파일을 사용하여 프로젝트에 추가 Migrations 폴더를 만듭니다. appsettings.json 정의 된 데이터베이스는 dnx ef database update 의해 생성되며 프로그램과 함께 포크하는 동안 SampleData.cs 테스트 데이터로 채워집니다.

그런데 package.json 패키지 폴더 ( project.json 과 동일한 레벨)로 옮겼습니다. 패키지를 사용하지는 않지만 이동을하면 Visual Studio에서 npm 패키지가 표시되고 관리됩니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.