I get an error when on the OnModelCreating
to seed my database. It says that I have a null reference exception. I can't figure out why. Please see my Classes:
public class TicketHeader
{
[Key]
public int Id { get; set; }
[Column(TypeName = "datetime")]
[Required (ErrorMessage = "Ticket date is required.")]
public DateTime DateOpened { get; set; }
[Column(TypeName = "datetime")]
public DateTime? DateClosed { get; set; }
[Column(TypeName = "nvarchar(200)")]
[Required(ErrorMessage = "Add a description to the ticket.")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "Description must be a minimum of 2 and maximum of 200 characters.")]
public string TicketDescription { get; set; }
[Column(TypeName = "nvarchar(50)")]
[Required(ErrorMessage = "Forwarding email address is required.")]
[EmailAddress (ErrorMessage = "Email is not in a valid format.")]
public string TicketRequesterEmail { get; set; }
[Column(TypeName = "nvarchar(100)")]
public string AttachmentPath { get; set; }
[Column(TypeName = "nvarchar(100)")]
public string TicketGuid { get; set; } = Guid.NewGuid().ToString();
[Column(TypeName = "nvarchar(20)")]
[Required(ErrorMessage = "Ticket status is required.")]
public Status TicketStatus { get; set; } = Status.New;
public int DepartmentId{ get; set; }
public ICollection<TicketDetail> TicketDetails { get; set; }
}
public class TicketDetail
{
[Key]
public int Id { get; set; }
public DateTime? DetailDate { get; set; } = DateTime.Now;
[Column(TypeName = "nvarchar(300)")]
public string Description { get; set; }
}
And this is on my AppDbContext
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<TicketHeader> TicketHeaders { get; set; }
public DbSet<Department> Departments { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Department>().HasData(
new Department { DepartmentId = 1, DepartmentName = "DevOps" }
);
modelBuilder.Entity<Department>().HasData(
new Department { DepartmentId = 2, DepartmentName = "IS" }
);
modelBuilder.Entity<Department>().HasData(
new Department { DepartmentId = 3, DepartmentName = "SEMM" }
);
modelBuilder.Entity<Department>().HasData(
new Department { DepartmentId = 4, DepartmentName = "Networking" }
);
modelBuilder.Entity<Department>().HasData(
new Department { DepartmentId = 5, DepartmentName = "Maintenance" }
);
modelBuilder.Entity<TicketHeader>().HasData(new TicketHeader
{
AttachmentPath = "attachments/ticketImage.png",
DateOpened = new DateTime(2021, 10, 5),
DepartmentId = 1,
Id = 1,
TicketDescription = "This is a description for ticket 1",
TicketRequesterEmail = "test@emai.com",
TicketStatus = Status.New,
TicketDetails = {
new TicketDetail
{
Description = "Description for ticket 1"
}
}
});
modelBuilder.Entity<TicketHeader>().HasData(new TicketHeader
{
AttachmentPath = "attachments/ticketImage.png",
DateOpened = new DateTime(2021, 1, 4),
DepartmentId = 2,
Id = 2,
TicketDescription = "This is a description for ticket 3",
TicketRequesterEmail = "test@emai.com",
TicketStatus = Status.New,
TicketDetails = {
new TicketDetail
{
Description = "Description for ticket 3"
}
}
});
modelBuilder.Entity<TicketHeader>().HasData(new TicketHeader
{
AttachmentPath = "attachments/ticketImage.png",
DateOpened = new DateTime(2021, 2, 5),
DepartmentId = 3,
Id = 3,
TicketDescription = "This is a description for ticket 4",
TicketRequesterEmail = "test@emai.com",
TicketStatus = Status.New,
TicketDetails = {
new TicketDetail
{
Description = "Description for ticket 4"
}
}
});
modelBuilder.Entity<TicketHeader>().HasData(new TicketHeader
{
AttachmentPath = "attachments/ticketImage.png",
DateOpened = new DateTime(2021, 3, 5),
DepartmentId = 4,
Id = 4,
TicketDescription = "This is a description for ticket 5",
TicketRequesterEmail = "test@emai.com",
TicketStatus = Status.New,
TicketDetails = {
new TicketDetail
{
Description = "Description for ticket 5"
}
}
});
modelBuilder.Entity<TicketHeader>().HasData(new TicketHeader
{
AttachmentPath = "attachments/ticketImage.png",
DateOpened = new DateTime(2021, 4, 5),
DepartmentId = 1,
Id = 5,
TicketDescription = "This is a description for ticket 1",
TicketRequesterEmail = "test@emai.com",
TicketStatus = Status.New,
TicketDetails = {
new TicketDetail
{
Description = "Description for ticket 1"
}
}
});
}
}
In my startup
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddScoped<IDepartmentRepository, DepartmentRepository>();
services.AddScoped<ITicketRepository, TicketRepository>();
services.AddControllers();
}
And this is what I get when I run the migration
PM> dotnet ef migrations add InitialCreate --project .\HelpDeskApi\HelpDeskApi.csproj
Build started...
Build succeeded.
System.NullReferenceException: Object reference not set to an instance of an object.
at HelpDeskApi.Models.AppDbContext.OnModelCreating(ModelBuilder modelBuilder) in D:\Projects\Autosweep\HelpDesk\API\HelpDeskApi\Models\AppDbContext.cs:line 32
at Microsoft.EntityFrameworkCore.Infrastructure.ModelCustomizer.Customize(ModelBuilder modelBuilder, DbContext context)
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()
at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()
at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.b__7_3(IServiceProvider p)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor
2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor
2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.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.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure1 accessor) at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure
1 accessor)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func1 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.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0
1.b__0()
at ......
What am I doing wrong?