Ошибка: для типа объекта требуется определить первичный ключ - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь следовать некоторому руководству по Entity Framework Core. В этом руководстве используется подход, основанный на коде, при создании базы данных. Когда я пытаюсь запустить первую миграцию, эта ошибка показывает:

Для типа объекта «Значение» требуется определить первичный ключ.

Точное сообщение выглядит следующим образом:

System.InvalidOperationException: тип сущности 'Value' требует первичный ключ, который будет определен. в Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateNonNullPrimaryKeys (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Internal.SqliteModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel (DbContext контекст, IConventionSetBuilder ConventionSetBuilder, IModelValidator валидатор) в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource. <> C__DisplayClass5_0.b__1 () в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy 1.ExecutionAndPublication (LazyHelper executeAndPublication, логическое значение useDefaultConstructor) в System.Lazy 1.CreateValue() at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()<br> at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__7_1(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scopedCallSite, область действия ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scopedCallSite, область действия ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)<br> at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()<br> at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance() at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure 1 Accessor) в Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService] (IInfrastructure 1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1 завод) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration (String name, String outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl (String name, String outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration. <> C__DisplayClass0_1. <. Т е р> b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase. <> C__DisplayClass3_0`1.b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Action действие) Тип сущности «Значение» требует определения первичного ключа.

(кто-то может отредактировать это сообщение, потому что оно выглядит ужасно, и я не могу это исправить?)

Я дважды проверил, есть ли у меня свойство Id в классе Value , и я добавил [Key] к нему, просто чтобы быть уверенным. Я также перезапустил свой ноутбук, так как это может быть связано с экземпляром сервера, запущенного во время предыдущих сеансов тестирования, или чем-то вроде этого.

Класс моей модели:

using System.ComponentModel.DataAnnotations;

namespace DatingApp.API.Models
{
    public class Value
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; } 
    }
}

DbContext:

using DatingApp.API.Models;
using Microsoft.EntityFrameworkCore;

namespace DatingApp.API.Data
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) : base (options) {}

        public DbSet<Value> Values {get; set;}
    }
}

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DatingApp.API.Data;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace DatingApp.API
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<DataContext>(c => c.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
               // app.UseHsts();
            }

            // app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

И строка подключения:

{
  "ConnectionStrings":
  {
    "DefaultConnection": "Data Source=DatingApp.db"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

То, что я написал в терминале:

dotnet ef migrations add InitialMigration

РЕДАКТИРОВАТЬ:

D:\DatingApp\DatingApp.API>dotnet ef migrations add InitialMigration -v
Using project 'D:\DatingApp\DatingApp.API\DatingApp.API.csproj'.
Using startup project 'D:\DatingApp\DatingApp.API\DatingApp.API.csproj'.
Writing 'D:\DatingApp\DatingApp.API\obj\DatingApp.API.csproj.EntityFrameworkCore.targets'...
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\B590\AppData\Local\Temp\tmp24D5.tmp

/ многословие: тихий / нолого D: \ DatingApp \ DatingApp.API \ DatingApp.API.csproj Запись «D: \ DatingApp \ DatingApp.API \ obj \ DatingApp.API.csproj.EntityFrameworkCore.targets» ... dotnet msbuild / target: GetEFProjectMetadata /property:EFProjectMetadataFile=C:\Users\B590\AppData\Local\Temp\tmp2B8C.tmp / многословие: тихий / нолого D: \ DatingApp \ DatingApp.API \ DatingApp.API.csproj DotNet build D: \ DatingApp \ DatingApp.API \ DatingApp.API.csproj / многословие: quiet / nologo

Compilation succesfull.
    Warnings: 0
    Errors: 0

Time passed: 00:00:02.25
dotnet exec --depsfile D:\DatingApp\DatingApp.API\bin\Debug\netcoreapp2.1\DatingApp.API.deps.json

- дополнительный путь доступа C: \ Users \ B590.nuget \ packages - дополнительный путь доступа "C: \ Program Files \ dotnet \ sdk \ NuGetFallbackFolder" --runtimeconfig D: \ DatingApp \ DatingApp.API \ Bin \ Debug \ netcoreapp2.1 \ DatingApp.API.runtimeconfig.json «C: \ Program Файлы \ DotNet \ SDK \ 2.1.403 \ DotnetTools \ DotNet-эф \ 2.1.4 \ инструменты \ netcoreapp2.1 \ любые \ инструменты \ netcoreapp2.0 \ любой \ ef.dll» миграции добавить InitialMigration - сборка D: \ DatingApp \ DatingApp.API \ Bin \ Debug \ netcoreapp2.1 \ DatingApp.API.dll --startup-сборка D: \ DatingApp \ DatingApp.API \ bin \ Debug \ netcoreapp2.1 \ DatingApp.API.dll --project-dir D: \ DatingApp \ DatingApp.API \ --language C # --working-dir D: \ DatingApp \ DatingApp.API --verbose --root-namespace DatingApp.API Используя сборку 'DatingApp.API'. Используя автозагрузку сборки 'DatingApp.API'. Используя базу приложения «D: \ DatingApp \ DatingApp.API \ bin \ Debug \ netcoreapp2.1». Используя рабочий каталог 'D: \ DatingApp \ DatingApp.API'. Использование корневого пространства имен «DatingApp.API». Используя каталог проекта 'D: \ DatingApp \ DatingApp.API \'. Поиск классов DbContext ... Поиск реализаций IDesignTimeDbContextFactory ... Поиск поставщика услуг приложения ... Поиск IWebHost доступа ... Использование среды «Развитие». Использование поставщика услуг приложения из средства доступа IWebHost в «Программе». Найден DbContext 'DataContext'. Поиск классов DbContext в проекте ... Использование контекста «DataContext». System.InvalidOperationException: тип сущности 'Value' требует определения первичного ключа. в Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateNonNullPrimaryKeys (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Internal.SqliteModelValidator.Validate (IModel модель) в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel (DbContext контекст, IConventionSetBuilder ConventionSetBuilder, IModelValidator валидатор) в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource. <> c__DisplayClass5_0.b__1 () в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy 1.ExecutionAndPublication (LazyHelper executeAndPublication, логическое значение useDefaultConstructor) at System.Lazy 1.CreateValue() at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__7_1(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scopedCallSite, область действия ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scopedCallSite, область действия ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance() at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure 1 сбруя) в Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService] (IInfrastructure 1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1 завод) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration (String имя, строка outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl (String name, String outputDir, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration. <> c__DisplayClass0_1. <. ctor> b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase. <> c__DisplayClass3_0`1.b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Action действие) Тип сущности «Значение» требует определения первичного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...