简体   繁体   English

Add-Migration异常:System.ArgumentNullException:值不能为null。 参数名称:属性

[英]Add-Migration exception: System.ArgumentNullException: Value cannot be null. Parameter name: property

I have the following code into a .NET Core 2.1 console application: 我将以下代码放入.NET Core 2.1控制台应用程序中:

public class ProductsContext : DbContext
    {
        public DbSet<Person> People { get; set; }
        public DbSet<Product> Products { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PersonProduct>().HasKey(sc => new { sc.PersonId, sc.ProductId });
            modelBuilder.Entity<Product>()
           .ToTable("Product")
           .HasDiscriminator<string>("Description")
           .HasValue<Product1>("Product1")
           .HasValue<Product2>("Product2");

            modelBuilder.Entity<PersonProduct>()
                .HasOne<Person>(sc => sc.Person)
                .WithMany(s => s.PersonProduct)
                .HasForeignKey(sc => sc.PersonId)
                .OnDelete(DeleteBehavior.Cascade);

            modelBuilder.Entity<PersonProduct>()
                .HasOne<Product>(sc => sc.Product)
                .WithMany(s => s.PersonProduct)
                .HasForeignKey(sc => sc.ProductId)
            .OnDelete(DeleteBehavior.Cascade);

            var navigation = modelBuilder.Entity<Person>().Metadata.FindNavigation(nameof(Person));
            navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=PQ;Trusted_Connection=True;MultipleActiveResultSets=true");
        }
    }

    public abstract class Product
    {
        public Guid Id { get; private set; }
        public string Description;
        public List<PersonProduct> PersonProduct { get; set; }

        public Product(Guid id)
        {
            Id = id;
        }

    }

    public class Product1 : Product
    {
        public Product1(Guid id)
            : base(id)
        {

        }
    }

    public class Product2 : Product
    {
        public Product2(Guid id)
            : base(id)
        {

        }
    }

    public sealed class Person
    {
        public Guid Id { get; private set; }
        public string Name { get; private set; }
        //public List<PersonSport> PersonSport { get; private set; }
        private readonly List<PersonProduct> _PersonProduct = new List<PersonProduct>();
        public IEnumerable<PersonProduct> PersonProduct => _PersonProduct.AsReadOnly();

        public Person(Guid id, string name)
        {
            Id = id;
            Name = name;
        }

        public void AddEntry(PersonProduct PersonProduct)
        {
            _PersonProduct.Add(PersonProduct);
        }

    }

    public sealed class PersonProduct
    {
        public Person Person { get; set; }
        public Guid PersonId { get; set; }
        public Product Product { get; set; }
        public Guid ProductId { get; set; }
    }

I have run the following command in Nuget Package Manager Console: ADD-MIGRATION InitialCreate 我已经在Nuget软件包管理器控制台中运行以下命令: ADD-MIGRATION InitialCreate

The error I get is: 我得到的错误是:

System.ArgumentNullException: Value cannot be null. System.ArgumentNullException:值不能为null。 Parameter name: property at Microsoft.EntityFrameworkCore.Utilities.Check.NotNull[T](T value, String parameterName) at Microsoft.EntityFrameworkCore.MutablePropertyBaseExtensions.SetPropertyAccessMode(IMutablePropertyBase property, Nullable 1 propertyAccessMode) at ConsoleApp1.ProductsContext.OnModelCreating(ModelBuilder modelBuilder) in C:\\GenieDevelopment\\REST\\ConsoleApp1\\Program.cs:line 42 at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) 参数名称:Microsoft.EntityFrameworkCore.Utilities.Check.NotNull [T](T值,字符串parameterName)处的属性, 1 propertyAccessMode) at ConsoleApp1.ProductsContext.OnModelCreating(ModelBuilder modelBuilder) in C:\\GenieDevelopment\\REST\\ConsoleApp1\\Program.cs:line 42 at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at System.Lazy处的Microsoft.EntityFrameworkCore.MutablePropertyBaseExtensions.SetPropertyAccessMode(IMutablePropertyBase属性,可空1 propertyAccessMode) at ConsoleApp1.ProductsContext.OnModelCreating(ModelBuilder modelBuilder) in C:\\GenieDevelopment\\REST\\ConsoleApp1\\Program.cs:line 42 at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at System.Lazy 1.ViaFactory(LazyThreadSafetyMode模式)
at System.Lazy 1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) at System.Lazy 1.CreateValue() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() 在System.Lazy 1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) at System.Lazy ()处在Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProviderEngineScope scope) 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() 在Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConjector.Scopes范围在(Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider,Type serviceType)在Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService [T](IServiceProvider provider)在Microsoft.EntityFramework_Core(DbContext。 )
at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure 1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) Value cannot be null. 在Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()处在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext 1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1工厂)在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(IInfrastructure 1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func )在Microsoft.EntityFrameworkCore。 Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(字符串名称,字符串outputDir,Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(字符串名称,字符串outputDir,字符串contextType)的Design.Internal.DbContextOperations.CreateContext(String contextType) Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase。<> c__DisplayClass3_0`1.b__0()处的字符串contextType)。Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)值不能为null。 Parameter name: property 参数名称:属性

What is the problem? 问题是什么? I have spent two hours Googling this and I have not found an answer. 我花了两个小时在Google上搜索,但没有找到答案。 For example, I have looked here: Add-Migration Value cannot be null. 例如,我看过这里: Add-Migration Value不能为null。 Parameter name: language 参数名称:语言

Seems like the navigation variable is null - FindNavigation cannot find property of name "Person" in class Person . 似乎navigation变量为null- FindNavigation在类Person找不到名称为“ Person”的属性。

I suppose you wanted to do something like this: 我想你想做这样的事情:

        var navigation = modelBuilder.Entity<Person>().Metadata.FindNavigation(nameof(PersonProduct));
        navigation.SetPropertyAccessMode(PropertyAccessMode.Field);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 System.ArgumentNullException:&#39;值不能为null。 参数名称:键 - System.ArgumentNullException: 'Value cannot be null. Parameter name: key' System.ArgumentNullException: &#39;值不能为空。 参数名称:items&#39; - System.ArgumentNullException: 'Value cannot be null. Parameter name: items' System.ArgumentNullException: '值不能是 null。 参数名称:providerInvariantName' - System.ArgumentNullException: 'Value cannot be null. Parameter name: providerInvariantName' System.ArgumentNullException: &#39;值不能为空。 参数名称:提供者&#39; - System.ArgumentNullException: 'Value cannot be null. Parameter name: provider' System.ArgumentNullException:“值不能是 null。 参数名称:实体” - System.ArgumentNullException: “Value cannot be null. Parameter name: entity” Telerik Open Access错误:异常:System.ArgumentNullException:值不能为null。 参数名称:converterName - Telerik Open Access error: Exception: System.ArgumentNullException: Value cannot be null. Parameter name: converterName 如何修复 Xamarin &#39;System.ArgumentNullException:&#39;值不能为空。 参数名称:地址&#39;异常 - How to fix Xamarin 'System.ArgumentNullException: 'Value cannot be null. Parameter name: address' Exception System.ArgumentNullException:值不能为 null。(参数“connectionString”) - System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString') 添加迁移值不能为空。 参数名称:语言 - Add-Migration Value cannot be null. Parameter name: language Winform: System.ArgumentNullException: &#39;值不能为空。 (参数&#39;流&#39;)&#39; - Winform: System.ArgumentNullException: 'Value cannot be null. (Parameter 'stream')'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM