2009-08-19 36 views
1

有当INT为空上的GetHashCode如果INT为空

在的GetHashCode上ActiveRecord.tt点有需要可空检查有问题的ActiveRecord和GetHashCode失败。 就是这样。

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

(更新) 该值在视图上可以为空。 我已经在inet上找到了使用此代码的视图。

const string [email protected]"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";  

之后,出现此错误。

+0

为什么主键可以为空? – 2009-08-20 08:50:52

+0

因为它在视图上为空! 我不仅包括表格,还包括使用我在互联网上找到的代码的视图。 常量字符串TABLE_SQL = @ “SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = '基表' \t工会 选择TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME, '查看' TABLE_TYPE 从INFORMATION_SCHEMA.VIEWS”; 顺便说一句,意见是非常重要的! – Aristos 2009-08-20 14:08:21

回答

0

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

编辑:您可以添加一个非空主键会改变你的看法如下亚音速的工作:

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

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

+0

我会检查是否有这个问题的意见,可以有一个独特的主键 - 但我相信视图的使用是至关重要的,需要一种方法来处理他们在亚音速3 – Aristos 2009-08-20 18:26:09

+0

您可能能够简单加强你的观点一点点来解决这个问题。我编辑了答案以添加示例 – 2009-08-20 19:13:53