如果int可以为空,则ActiveRecord和GetHashCode会失败

时间:2009-08-19 13:39:56

标签: subsonic3 gethashcode

当getHashCode

上的int可以为空时,会出现问题

在ActiveRecord.tt上的GetHashCode点上,需要一个可空的检查。 这样的事情。

<#      
    if(tbl.PK.SysType=="int" && !tbl.PK.Nullable ){
#>        
        public override int GetHashCode() {
            return this.<#=tbl.PK.CleanName #>;
        }        
<#      }#>

(更新) 视图上的此值可以为空。 我使用我在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";    

之后,出现此错误。

1 个答案:

答案 0 :(得分:0)

SubSonic需要一个非空的主键。您需要修改视图,以便返回一个非空整数或指南的Id列。

编辑:您可以通过更改视图来添加对SubSonic有效的非空主键,如下所示:

CREATE VIEW MyView AS
  SELECT NewID() AS Id, *
  FROM MyTable

一个缺点是你不会得到一致的Id。如果这是一个问题,你可以用从列计算的值替换NewID(),但缺点是性能会变慢。