Activerecord y Gethashcode falla si int es anulable
-
18-09-2019 - |
Pregunta
Hay un problema cuando el int es anulable en gethashcode
En el punto de Gethashcode en Activerecord.tt, es necesario un cheque anulable. Algo como esto.
<#
if(tbl.PK.SysType=="int" && !tbl.PK.Nullable ){
#>
public override int GetHashCode() {
return this.<#=tbl.PK.CleanName #>;
}
<# }#>
(Actualización) Este valor puede ser nulo en las vistas. He incluido las vistas que usan este código que encontré en 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";
Después de eso, este error aparece.
Solución
Subsonic requiere una clave primaria que no sea nula. Debe modificar su vista para que devuelva una columna de identificación que sea un entero o GUID no nulo.
Editar: puede agregar una clave primaria no nula que funcionará para subsonic cambiando su vista de la siguiente manera:
CREATE VIEW MyView AS
SELECT NewID() AS Id, *
FROM MyTable
El único inconveniente es que no obtendrá una identificación consistente. Si ese es un problema, podría reemplazar NewID () con un valor calculado a partir de la columna, pero el inconveniente de eso es el rendimiento será más lento.