ActiveRecord e GetHashCode esito negativo se int è annullabile
-
18-09-2019 - |
Domanda
C'è un problema quando l'int è annullabile in GetHashCode
Al punto di GetHashCode su ActiveRecord.tt v'è la necessità per un controllo annullabile. Qualcosa di simile a questo.
<#
if(tbl.PK.SysType=="int" && !tbl.PK.Nullable ){
#>
public override int GetHashCode() {
return this.<#=tbl.PK.CleanName #>;
}
<# }#>
(aggiornamento) Questo valore può essere venire nulla sulle viste. Ho includono i punti di vista utilizzando questo codice che ho trovato su inet.
const string TABLE_SQL=@"SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
union
select Table_catalog, table_schema, table_name, 'View' table_type
from information_schema.views";
Dopo di che, viene visualizzato questo errore.
Soluzione
SubSonic richiede una chiave primaria che non è nullo. È necessario modificare la visualizzazione in modo che restituisce una colonna ID che è un intero non nullo o Guid.
EDIT: è possibile aggiungere una chiave primaria non nulla che lavorerò per SubSonic cambiando la vostra vista come segue:
CREATE VIEW MyView AS
SELECT NewID() AS Id, *
FROM MyTable
L'unico svantaggio è che non sarà possibile ottenere un ID coerente. Se questo è un problema si potrebbe sostituire NewID () con un valore calcolato dalla colonna, ma l'inconveniente di che è la performance sarà più lento.