So beheben Sie einen Fehler beim Registrieren eines Benutzers in meinem ASP.NET Core MVC-ProjektC#

Ein Treffpunkt für C#-Programmierer
Guest
 So beheben Sie einen Fehler beim Registrieren eines Benutzers in meinem ASP.NET Core MVC-Projekt

Post by Guest »

Ich erstelle ein ASP.NET Core MVC-Projekt mit Identitätskonten und als ich auf die Schaltfläche „Registrieren“ klicke (auf der Registrierungsseite).
Ich habe diese Ausnahme erhalten:
Während der Verarbeitung der Anfrage ist eine nicht behandelte Ausnahme aufgetreten.
SqlException: Der Wert NULL kann nicht in Spalte „FirstName“, Tabelle „VolunteerCenterDB“ eingefügt werden. dbo.AspNetUsers'; Die Spalte erlaubt keine Nullen. INSERT schlägt fehl.
Die Anweisung wurde beendet.
Microsoft.Data.SqlClient.SqlCommand+c.b__189_0(Task Ergebnis)

Ich bin verwirrt, ob das Problem am Modell meines Benutzers liegt oder nicht Program.cs.
Ich dachte, ich sollte firstName und lastName auf Nullwerte setzen, aber ich glaube nicht, dass das Sinn macht. Da ich andere Optionen habe, weiß ich nicht, was ich sonst noch tun könnte?

Code: Select all

User.cs
:

Code: Select all

public class User : IdentityUser
{
public User()
{
this.Id = Guid.NewGuid().ToString();
}

public string FirstName { get; set; }
public string LastName { get; set; }

public virtual ICollection VolunteerSignups { get; set; }
public virtual ICollection Events { get; set; }
public virtual ICollection StatusHistories { get; set; }
}

Code: Select all

Program.cs
:

Code: Select all

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using VolunteerCenterMVCProject.Data;
using VolunteerCenterMVCProject.Models;
using VolunteerCenterMVCProject.Services.Interfaces;
using VolunteerCenterMVCProject.Services;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

builder.Services.AddDbContext(options =>
options.UseSqlServer(connectionString));

// Identity configuration
/*builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles()
.AddEntityFrameworkStores();
*/
builder.Services.AddDefaultIdentity()
.AddRoles()
.AddEntityFrameworkStores();

// Add MVC and Razor Pages
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();

// Register services
builder.Services.AddTransient();

var app = builder.Build();

// Seed data on application startup
if (app.Environment.IsDevelopment())
{
using (var serviceScope = app.Services.CreateScope())
{
var dbContext = serviceScope.ServiceProvider.GetRequiredService();
dbContext.Database.Migrate();
}

app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}

// Configure middleware pipeline
app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

// Map routes
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();
Ich bin mir nicht sicher, aber ich werde meinen DbContext teilen:

Code: Select all

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using VolunteerCenterMVCProject.Models;

namespace VolunteerCenterMVCProject.Data
{
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}

public DbSet Locations { get; set; }
public DbSet Categories { get; set; }
public DbSet Signups { get; set; }
public DbSet statusHistories { get; set; }
public DbSet Events { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

#region Categories
modelBuilder.Entity()
.HasKey(x => x.CategoryId);
#endregion

#region Locations
modelBuilder.Entity()
.HasKey(c => c.LocationId);
#endregion

#region VolunteerSingups

modelBuilder.Entity()
.HasKey(c => c.SignupId);

modelBuilder.Entity()
.HasOne(x => x.User)
.WithMany(u => u.VolunteerSignups)
.HasForeignKey(x => x.VolunteerId)
.OnDelete(DeleteBehavior.Restrict);

modelBuilder.Entity()
.HasOne(x => x.Event)
.WithMany(e =>  e.VolunteerSignups)
.HasForeignKey(x => x.EventId)
.OnDelete(DeleteBehavior.Restrict);

#endregion

#region StatusHistory
modelBuilder.Entity()
.HasKey(c => c.StatusHistoryId);

modelBuilder.Entity()
.HasOne(x => x.Event)
.WithMany(x => x.StatusHistories)
.HasForeignKey(x => x.EventId)
.OnDelete(DeleteBehavior.Restrict);

modelBuilder.Entity()
.HasOne(x => x.User)
.WithMany(x => x.StatusHistories)
.HasForeignKey(x => x.ChangedBy)
.OnDelete(DeleteBehavior.Restrict);

#endregion

#region Events
modelBuilder.Entity()
.HasKey(c => c.EventId);

modelBuilder.Entity()
.HasOne(x => x.Category)
.WithMany(x => x.Events)
.HasForeignKey(x => x.CategoryId)
.OnDelete(DeleteBehavior.Restrict);

modelBuilder.Entity()
.HasOne(x => x.Location)
.WithMany(x => x.Events)
.HasForeignKey(x => x.LocationId)
.OnDelete(DeleteBehavior.Restrict);

modelBuilder.Entity()
.HasOne(x => x.User)
.WithMany(u => u.Events)
.HasForeignKey(x => x.CreatedBy)
.OnDelete(DeleteBehavior.Restrict);

#endregion
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);

optionsBuilder.UseLazyLoadingProxies();
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post