![](/img/trans.png)
[英]System.ArgumentNullException: 'Value cannot be null. Parameter name: key'
[英]Add-Migration exception: System.ArgumentNullException: Value cannot be null. Parameter name: property
我將以下代碼放入.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; }
}
我已經在Nuget軟件包管理器控制台中運行以下命令: ADD-MIGRATION InitialCreate
我得到的錯誤是:
System.ArgumentNullException:值不能為null。 參數名稱: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模式)
在System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) at System.Lazy
()處在Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
在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。 )
在Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()處在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext1 accessor) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func
1工廠)在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(IInfrastructure1 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。 參數名稱:屬性
問題是什么? 我花了兩個小時在Google上搜索,但沒有找到答案。 例如,我看過這里: Add-Migration Value不能為null。 參數名稱:語言
似乎navigation
變量為null- FindNavigation
在類Person
找不到名稱為“ Person”的屬性。
我想你想做這樣的事情:
var navigation = modelBuilder.Entity<Person>().Metadata.FindNavigation(nameof(PersonProduct));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.