question

leodelciello-7930 avatar image
0 Votes"
leodelciello-7930 asked JackJJun-MSFT edited

EF core scaffolding di un database esistente

Sto facendo un programma che legge le estrazioni del Lotto dalle varie ruote .. Il database contiene tante tabelle quante sono le ruote, ognuna chiamata "Estrazione_"+ Nome ruota (es. "Estrazione_Roma", "Estrazione_Nazionale" etc..
Ho due problemi di cui uno particolarmente esilarante:

1) lo scaffolding mi pluralizza il nome del dbset: cioè a fronte della tabella "Estrazione_Roma" ho il modello "Estrazione_Roma" ma il dbset è "Estrazione_Romas" (con "s" finale ) : come faccio per evitare questa pluralizzazione ?

2) questo è davvero assurdo : la tabella dell'ultima ruota , "Estrazione_Venezia", viene resa nel modello "Estrazione_Venezium" (, si esattamente... desinenza "ium" che non so da dove venga ....) ... il dbset invece non è pluralizzato stavolta .... com'è possibile che EF "inventi" di sana pianta un nome modello che non esiste da nessuna parte ??????

il mio comando di scaffolding è il seguente:

Scaffold-DbContext “Data Source=LAPTOP-B0ND4A67;Initial Catalog=SmallLotto; Trusted_Connection=Yes;Encrypt=False  ” -Provider Microsoft.EntityFrameworkCore.SqlServer -Schema General -Context GeneralContext -OutputDir GeneralModels -UseDatabaseNames

dotnet-csharpdotnet-entity-framework-core
· 4
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Per il problema n. 2,.sospettando che si trattasse di un problema legato all'ordine della tabella specifica ("Estrazione_Venezia") nel db,ho provato ad eliminare la tabella ,attendendomi stavolta che il problema si verificasse sulla nuova ultima tabella ("Estrazione_Torino", precedentemente penultima) : ma su quest'ultima invece non si verifica, il che mi fa pensare che si tratti di qualcosa legato al nome stesso della tabella .... ma è qualcosa comunque e totalmente privo di senso .... immagino si tratti di uno dei tanti bug di EF Core ... o sbaglio ?

0 Votes 0 ·

Sto vedendo anche altri errori come se non bastasse : nei modelli generati, non tutti i campi delle tabelle sono mappati sulle relative proprietà dei modelli: diciamo che su 6 colonne di tabella, vengono create solo 4 proprietà corrispondenti nel modello mappato su quella tabella .... complimenti vivissimi !!!

0 Votes 0 ·

I was writing italian because I thought some of my country would answer
I'll rewrite in english.
I have done a small desktop app (.net 6 , VS 2022) using EF core 6.
Using database first approach , i scaffolded the existing db which is made of a bunch of table , all identical and differing only by the name .
The names of the tables end with an Italian town's name , Roma , Torino and so on .
The model generated has all the entity classes correctly named after the corresponding tables : ex. table Roma -> entity Roma, table Torino -> entity Torino . Only one entity doesn't correspond : table Venezia -> entity Venezium ?????
Moreover the dbset associated to any of the entities has the name pluralized , that is entity Roma has the dbset Romas, entity Torino has the dbset Torinos and so on : only the last one , the entity Venezium , whose name is wrong , has the correct dbset name , that is Venezia.
In addition I can see that in the entities, not all the corresponding table's columns are mapped to entity properties : many of them are lacking ....
I want to know :
- how to avoid pluralization of dbset names
- why only the table Venezia generates the entity Venezium and not Venezia
- why the scaffolding doesn't map all the tables' columns to properties in the corresponding entities


0 Votes 0 ·

My doubt, at least for the second point is, is it a known bug in EF core 6 ?

0 Votes 0 ·

1 Answer

JackJJun-MSFT avatar image
0 Votes"
JackJJun-MSFT answered leodelciello-7930 commented

@leodelciello-7930, Welcome to Microsoft Q&A,

 - how to avoid pluralization of dbset names
 - why only the table Venezia generates the entity Venezium and not Venezia

They are actually the same problem. We could use -NoPluralize command mentioned in doc to disable the pluralizer to solve the problem.

Full command:

 Scaffold-DbContext 'connstr'  Microsoft.EntityFrameworkCore.SqlServer -NoPluralize

After run the command, you could see the following result:

240521-image.png

About your third question, Could you provide your database table design?


Best Regards,
Jack




If the answer is the right solution, please click "Accept Answer" and upvote it.If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


image.png (17.3 KiB)
· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.


JackJJun-MSFT thanks for answering : using the -NoPluralize switch solved the problem , but if I get it in respect of eliminating the final "s" from the dbsets , I am not sure I can get why it was transforming Venezia into Venezium as a pluralization task. I only can think of it as assuming that "Venezia" is a pluralized term (maybe it understands Latin :) ??) and as a consequence it deducts that if the table , hence the dbset, is Venezia , and then is plural, the corresponding entity which must be singular has to be the Venetium latin declination of the term.
Quite surprising indeed :)
As far as the third question you can ignore it as it was due to my misreading of the model.
Thank you again

0 Votes 0 ·