代码之家  ›  专栏  ›  技术社区  ›  Aristos

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

  •  1
  • Aristos  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  0
  •   Adam Cooper    16 年前

    子音速需要一个非空的主键。您需要修改视图,使其返回一个非空整数或guid的id列。

    编辑:通过如下更改视图,可以添加一个非空的主键,该主键可用于亚音速:

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

    一个缺点是您无法获得一致的ID。如果这是一个问题,您可以用从列中计算的值替换newID(),但缺点是性能会变慢。

    推荐文章