12 messaggi dal 19 settembre 2014
Salve,

Partendo da un progetto template di .net mvc con identity.
Successivamente ho aggiunto campi alla tabella AspNetUsers ed ho modificato il campo "Email" aggiungendo la il prefisso del tipo del campo che usualmente utilizzo "nva_Email".
Ho cercato tutti i riferimenti al campo "Email" nella soluzione al fine di trasformarli in "nva_email" ma purtroppo, al momento della creazione dell'utente l'errore è sempre..

An unhandled exception occurred while processing the request.
SqlException: Invalid column name 'Email'.
Invalid column name 'EmailConfirmed'.
Invalid column name 'PhoneNumber'.
Invalid column name 'PhoneNumberConfirmed'.
Invalid column name 'UserName'.
System.Data.SqlClient.SqlCommand+<>c.<ExecuteDbDataReaderAsync>b__108_0(Task<SqlDataReader> result)

La domanda è questa: I campi di "Identity" possono essere ridefiniti?
Se si, dove devo cercare?

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


La domanda è questa: I campi di "Identity" possono essere ridefiniti?

Certamente, apri il file /Data/ApplicationDbContext.cs. Appena lo apri, vedrai che all'interno non c'è nulla perché esiste un mapping di default all'interno della classe derivata IdentityDbContext<ApplicationUser> (che non vedi).
Tu però, dal metodo OnModelCreating, puoi ridefinire il mapping esistente tra le proprietà della classe ApplicationUser e le colonne del database.


ho modificato il campo "Email" aggiungendo la il prefisso del tipo del campo che usualmente utilizzo "nva_Email".

Ok, allora dato che hai già rinominato la colonna del db ti basta aggiungere questo:
protected override void OnModelCreating(ModelBuilder builder)
{
  base.OnModelCreating(builder);
  // Customize the ASP.NET Identity model and override the defaults if needed.
  // For example, you can rename the ASP.NET Identity table names and more.
  // Add your customizations after calling base.OnModelCreating(builder);
  
  builder
  .Entity<ApplicationUser>()
  .Property(applicationUser => applicationUser.Email)
  .HasColumnName("nva_Email");
}


Nota che la proprietà "Email" non l'ho rinominata e può restare così. Se tu vuoi rinominare anche quella, clicca con il mouse sulla parola "Email" poi fai CTRL+R CTRL+R per rinominarla. Verrà sostituita in tutte le sue occorrenze nel progetto. Non devi cercare tutti i riferimenti a mano e sostituirli uno per uno.
Comunque, ricorda che ti è consentito avere nomi proprietà diversi dai nomi di colonne su cui rimappano.

ciao,
Moreno

P.S. quindi che strategia vuoi usare per aggiornare lo schema del db? Lo fai a mano e poi adegui il modello C#? Le migration le hai considerate?
Modificato da BrightSoul il 13 marzo 2018 18.51 -

Enjoy learning and just keep making
12 messaggi dal 19 settembre 2014

P.S. quindi che strategia vuoi usare per aggiornare lo schema del db? Lo fai a mano e poi adegui il modello C#? Le migration le hai considerate?

Ora che il progetto è praticamente fatto per "didattica" uso le migration. Però no nso quanto sia conveniente usarle quando si ha un DB popolato: eventuali relazioni, chiavi.. considera tutto l'EF?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Però no nso quanto sia conveniente usarle quando si ha un DB popolato

No, infatti in questo caso puoi continuare a modificare a mano il database e poi adeguare anche il mapping di Entity Framework.


eventuali relazioni, chiavi.. considera tutto l'EF?

Puoi costruire automaticamente un modello code-first facendo il reverse engineering di un database esistente. Vedi qui, si usa la cmdlet Scaffold-DbContext oppure il comando dotnet ef dbcontext scaffold, se non usi Visual Studio.
https://www.youtube.com/watch?v=fnXEkWXYeXg
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

ciao,
Moreno
Modificato da BrightSoul il 16 marzo 2018 19.02 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.