Entity framework creates a query like this:
Select * FROM mydatabase.Industry; Notice the capitalized letter. This works fine on mysql in Windows, but on Linux I get this error:
Table 'mydatabase.Industry' doesn't exist Any Ideas?
Questo non ha nulla a che fare con l'entità stessa.
È una variante della classica configurazione di default diversa su due diversi problemi del sistema operativo.
La soluzione potrebbe non essere più necessario, ma ecco il motivo per il vostro problema:
MySQL memorizza le tabelle come file.
E MySQL è stato originariamente sviluppato su Linux, dove i nomi dei file e quindi i nomi delle tabelle erano sensibili al maiuscolo/minuscolo (poiché la maggior parte dei filesystem di Linux sono case-sensitive).
Quindi MySQL è stato portato su Windows, in cui il filesystem non fa distinzione tra maiuscole e minuscole.
Su Windows, il file system non fa distinzione tra maiuscole e minuscole e quindi non è in grado di distinguere i file maiuscoli & inferiori.
Per risolvere i problemi risultanti, è necessario aggiungere l'opzione per ignorare il caso dei nomi delle tabelle.
Quindi è stata creata la variabile di configurazione case-sensivity dell'identificatore "lower_case_table_names", con la quale è possibile modificare tali impostazioni.
Ulteriori informazioni sui valori possibili [0, 1, 2] qui: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
In Windows, è possibile configurare nel file my.ini, che si trova all'interno o intorno:
C:\Program Files\MySQL\MySQL Server X.Y
, a seconda della versione in esecuzione. Se non trovi l'impostazione, puoi aggiungerla alla fine del file my.ini.
Su Linux, questo file di configurazione si trova in genere /etc/my.cnf o /etc/mysql/my.cnf ma che possono essere diversi a seconda dei vari Linux-dristributions e versioni di distribuzione.
Così l'impostazione predefinita per questo valore è
on Linux: Case-Senstivie
on Windows: Case-Insensitive
Pertanto, entità-quadro SQL generato, che è stato generato da un modello con opere di rivestimento sbagliate su Windows, ma non su Linux.
Tutto quello che dovete fare è cambiare il valore di lower_case_table_names su Linux in 1 nel file my.cnf in modo che sia anche case-insensitive.
Si noti che sebbene si possa anche rendere MySQL su Windows sensibile al maiuscolo/minuscolo, questa non è una buona idea.
Quindi, ricordarsi di riavviare il servizio MySQL/mysqld prima di testare se funziona o meno.
In tutti i casi, ricordarsi sempre di controllare se funziona anche su Linux, poiché il comportamento di MySQL non è sempre identico su questi due sistemi.
Il motivo per i diversi valori predefiniti è che su Linux si ottiene una prestazione più elevata quando si è in modalità case-sensitive, perché in tal caso non è sempre necessario utilizzare i nomi in lettere minuscole. In Windows invece, avere una configurazione senza distinzione tra maiuscole e minuscole è migliore, perché non è possibile avere due file con lo stesso nome che differiscono solo nella custodia nella stessa cartella. Ciò porterebbe a malfunzionamenti. Quindi il default è senza distinzione tra maiuscole e minuscole in Windows.
Incidentially, questo è il motivo per cui le prestazioni di MySQL su Linux è migliore della performance su Windows (tra le altre cose, come una migliore programmazione e più veloce IO/filesystem su Linux)
Si noti che è anche possibile modificare il caso -sensitity di query (confronto string) facendo
CREATE DATABASE test_database CHARACTER SET utf8 COLLATE utf8_general_cs;
o
CREATE DATABASE test_database CHARACTER SET utf8 COLLATE utf8_general_ci;
rispettivamente
0.123.
E si può anche impostare maiuscole e minuscole su una singola tabella, come questo
DROP TABLE IF EXISTS single_test_table;
CREATE TABLE single_test_table(
single_test_id int unsigned NOT NULL auto_increment,
...
PRIMARY KEY PK_single_test_id (single_test_id),
...
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_cs;
Perché non si fa a cambiare il nome della tabella configurata in minuscolo? Il nome della tabella SQL e il nome dell'entità sono configurabili in modo indipendente. – usr
Intendi cambiare il nome dell'entità in minuscolo? Quindi, invece di una classe C# "Industria" avrei una "industria" di classe? – AFrieze
Nessuno dei due è diverso. Puoi avere il nome della tabella xyz mappato all'entità Abc. – usr