【发布时间】: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