ciao alka.
allora, il discorso è che faccio fatica ad adattare i miei ricordi su EF e la documentazione che trovo su sto progetto.
cmq, questo è l'ultimo test che ho fatto:
l'errore che ottengo è questo:codice:[HttpPost("changepwd")] [AllowAnonymous] public async Task<IActionResult> ChangePwd([FromBody] ChangePasswordRequest changePwdRequest) { Utente user; ChangePasswordResponse response = new ChangePasswordResponse(); try { user = await _userManager.FindByNameAsync(changePwdRequest.Email); if (user == null) throw new Exception("Utente non trovato."); var result = await _userManager.ResetPasswordAsync(user, changePwdRequest.Code, changePwdRequest.ConfirmPassword); response.IsSuccess = result.Succeeded; response.Errors = result.Errors.Select(x => x.Description); // UPDATE DEI CAMPI UTENTE var newUser = new Utente(); //newUser.Email = changePwdRequest.Email; newUser.HasChanged = true; using (var dbContext = new ClonidentDbContext()) { dbContext.Users.Attach(newUser); dbContext.Entry(user).Property(x => x.HasChanged).IsModified = true; dbContext.SaveChanges(); } return Ok(response); } catch (Exception ex) { _logger.LogInformation($"Email confirmation error: {ex.Message} - UserID: {changePwdRequest.Email} - Code: {changePwdRequest.Code}"); response.Errors = new List<string> { ex.Message }; response.IsSuccess = false; return Ok(response); } }
dentro Startup.cs ho trovato questo:codice:
- No database provider has been configured for this DbContext. A provider can be configured by overriding the 'DbContext.OnConfiguring' method or by using 'AddDbContext' on the application service provider. If 'AddDbContext' is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.
dove ClonidentDbContext è questo (non te lo riporto tutto perchè troppo lungo):codice:string connectionString = Configuration["ConnectionString:ClonidentDbSvil"]; services.AddDbContext<ClonidentDbContext>(options => options.UseSqlServer(connectionString).EnableSensitiveDataLogging());
ho fatto un pò di ricerche in giro, ma non capisco come risolvere.codice:// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated> using System; using BCSoft.Clonident.DatabaseContext.EF.Entities; using BCSoft.Clonident.DatabaseContext.EF.Entities.Cross; using BCSoft.Clonident.DatabaseContext.EF.Entities.Tipologiche; using BCSoft.Clonident.DatabaseContext.EF.Entities.Statistiche; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; #nullable disable namespace BCSoft.Clonident.DatabaseContext.EF { public partial class ClonidentDbContext : IdentityDbContext<Utente, Ruolo, string, IdentityUserClaim<string>, RuoloUtente, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>> { public ClonidentDbContext() { } public ClonidentDbContext(DbContextOptions<ClonidentDbContext> options) : base(options) { } // ..................... public DbSet<Utente> Utentes { get; set; } // AGGIUNTO DA ME private static void ConfigureCustomIdentityRules(ModelBuilder modelBuilder) { modelBuilder.Entity<Utente>(b => { // Each User can have many entries in the UserRole join table b.HasMany(e => e.UserRoles) .WithOne(e => e.User) .HasForeignKey(ur => ur.UserId) .IsRequired(); }); modelBuilder.Entity<Ruolo>(b => { // Each Role can have many entries in the UserRole join table b.HasMany(e => e.UserRoles) .WithOne(e => e.Role) .HasForeignKey(ur => ur.RoleId) .IsRequired(); }); modelBuilder.Entity<RuoloUtente>(e => { e.HasOne(x => x.Role).WithMany(x => x.UserRoles).HasForeignKey(s => s.RoleId).IsRequired(); e.HasOne(x => x.User).WithMany(x => x.UserRoles).HasForeignKey(s => s.UserId).IsRequired(); } ); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasAnnotation("Relational:Collation", "Latin1_General_CI_AS"); // ........................ OnModelCreatingPartial(modelBuilder); base.OnModelCreating(modelBuilder); ConfigureCustomIdentityRules(modelBuilder); } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); public int NextValueForSequence() { SqlParameter result = new SqlParameter("@result", System.Data.SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output }; Database.ExecuteSqlRaw($"SELECT @result = (NEXT VALUE FOR PraticaNumbers)", result); return (int)result.Value; } } }
perchè su un altro progetto, sicuramente più "lineare" di questo, non avevo tutti sti problemi.
quindi non capisco se sono io che non ci sto capendo nulla, o è il progetto complicato.

Rispondi quotando
