【问题标题】:Value cannot be null. (Parameter 'o') EF Core On Update-Database值不能为空。 (参数“o”)更新数据库上的 EF Core
【发布时间】:2021-10-30 10:22:37
【问题描述】:

我正在使用 Entity Framework Core - 并且在迁移后更新数据库顺利没有任何问题,包管理器控制台或命令提示符中的下一个命令的输出。

update-database

输出

Finding design-time services referenced by assembly 'E-Tickets'...
No referenced design-time services were found.
Finding IDesignTimeServices implementations in assembly 'E-Tickets'...
No design-time services were found.
System.ArgumentNullException: Value cannot be null. (Parameter 'o')
   at Microsoft.EntityFrameworkCore.Utilities.Check.NotNull[T](T value, String parameterName)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommandListBuilder.Append(String o)
   at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(AlterDatabaseOperation operation, IModel model, MigrationCommandListBuilder builder)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.<>c.<.cctor>b__83_5(MigrationsSqlGenerator g, MigrationOperation o, IModel m, MigrationCommandListBuilder b)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
   at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model, MigrationsSqlGenerationOptions options)
   at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model, MigrationsSqlGenerationOptions options)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(Migration migration, MigrationsSqlGenerationOptions options)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.<>c__DisplayClass16_2.<GetMigrationCommandLists>b__2()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Value cannot be null. (Parameter 'o')

最重要的一行是

值不能为空。 (参数'o')

我无法识别“o”是什么。

我将提供启动、上下文和表格来查看问题的所有方面。我正在使用代码优先的方法。

配置服务

public void ConfigureServices(IServiceCollection services)
{
    var connectionString = Configuration.GetConnectionString("defaultConnection");

    services.AddDbContext<eTicketDbContext>(options =>
                                                options.UseSqlServer(connectionString));

    services.AddControllersWithViews();
    services.AddRazorPages();
}

数据库上下文

public eTicketDbContext(DbContextOptions<eTicketDbContext> options): base(options)
{
}

public virtual DbSet<Actor> Actors { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<Cinema> Cinemas { get; set; }
public virtual DbSet<Movie> Movies { get; set; }
public virtual DbSet<Producer> Producers { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
} 

演员表

public class Actor
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "Profile Picture")]
    [FileExtensions(Extensions = "JPEG,JPG,PNG", ErrorMessage = "Error Wrong Extension")]
    public string ProfilePictureURL { get; set; }

    [Display(Name = "Full Name")]
    [Required(ErrorMessage = "Full Name is required")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Full Name must be between 3 and 50 chars")]
    public string FullName { get; set; }

    [Display(Name = "Biography")]
    [Required(ErrorMessage = "Biography is required")]
    [StringLength(400, MinimumLength = 25, ErrorMessage = "Full Name must be between 3 and 50 chars")]
    public string Bio { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

分类表

public class Category
{
    [Key]
    public int CategoryId { get; set; }
    public string Categ { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

电影桌

public class Cinema
{ 
    [Key]
    public int Id { get; set; }

    [Display(Name = "Cinema Logo")]
    [FileExtensions(Extensions = "JPEG,JPG,PNG", ErrorMessage = "Error Wrong Extension")]
    public string Logo { get; set; }

    [Display(Name = "Cinema Name")]
    [Required(ErrorMessage = "Cinema name is required")]
    public string Name { get; set; }

    [Display(Name = "Description")]
    [Required(ErrorMessage = "Cinema description is required")]
    public string Description { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

电影桌

public class Movie
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "Name")]
    [Required(ErrorMessage = "Name is required")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Full Name must be between 3 and 50 chars")]
    public string Name { get; set; }

    [Display(Name = "Description")]
    [Required(ErrorMessage = "Description is required")]
    [StringLength(400, MinimumLength = 25, ErrorMessage = "Full Name must be between 25 and 400 chars")]
    public string Description { get; set; }

    [Display(Name = "Price")]
    [Required(ErrorMessage = "Price is required")]
    [Range(.1, 100)]
    public double Price { get; set; }

    [Required]
    [Display(Name = "Picture")]
    [FileExtensions(Extensions = "JPEG,JPG,PNG", ErrorMessage = "Error Wrong Extension")]
    public string ImageURL { get; set; }

    [Display(Name = "Start Date")]
    [Required(ErrorMessage = "Start Date is required")]
    [BindProperty, DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime StartDate { get; set; }

    [Display(Name = "End Date")]
    [Required(ErrorMessage = "End Date is required")]
    public DateTime EndDate { get; set; }

    [Required]
    [Display(Name = "Cinema")]
    public int CinemaId { get; set; }

    [Required]
    [Display(Name = "Producer")]
    public int ProducerId { get; set; }

    public virtual Cinema Cinema { get; set; }
    public virtual Producer Producer { get; set; }

    public virtual ICollection<Actor> Actors { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
}

生产者表:

public class Producer
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "Profile Picture")]
    [FileExtensions(Extensions = "JPEG,JPG,PNG", ErrorMessage = "Error Wrong Extension")]
    public string ProfilePictureURL { get; set; }

    [Display(Name = "Full Name")]
    [Required(ErrorMessage = "Full Name is required")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Full Name must be between 3 and 50 chars")]
    public string FullName { get; set; }

    [Display(Name = "Biography")]
    [Required(ErrorMessage = "Biography is required")]
    public string Bio { get; set; }

    public virtual ICollection<Movie> Movies { get; set; }
}

很抱歉这个问题太长了,但我试图说明整个画面

【问题讨论】:

  • 代替 Configuration.GetConnectionString("yourConnectionString name from appsettings.json"),将您的连接字符串进行测试。从 appsettings.json 获取连接时可能会出现此错误
  • 不是。只需更改 DbContext 名称即可解决问题,我不知道为什么,但它正在工作。
  • @MohammedSaied 请分享您的答案并接受它

标签: c# .net entity-framework-core asp.net-core-mvc


【解决方案1】:

只需更改 DbContext 名称即可解决问题,我不知道为什么,但它正在工作。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我通过在我的项目中升级 EntityFramework 解决了。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2021-07-26
    相关资源
    最近更新 更多