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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top