Castle ActiveRecord 访问 Oracle 的几个应注意之处

以前都是拿AR访问Sql Server的, 工作的一直很好. 最近数据库换成Oracle 8i了, 使用AR访问时遇到了几个小问题, 现把问题描述和解决方案提供出来, 希望给遇到同样问题的朋友一些帮助.

[1] Primary Key映射属性:
要设为Sequence或者Native, 而不是Identity, 这个提醒一下大家.
例如: (表中的Id类型为Number)

    [PrimaryKey(PrimaryKeyType.Sequence, "id")]
    public int Id
    {
        get { return this.id; }
        set { this.id = value; }
    }


[2] varchar2类型的映射:
把string类型映射到表中的varchar2类型的时候, 映射的时候要在映射属性中标明映射到AnsiString, 否则一旦涉及到更新操作就会报告这个异常: "ORA-12704: 字符集不匹配".
例如:(表中的Name类型为varchar2)

    [Property("xm", ColumnType = "AnsiString")]
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }


[3] 执行HQL语句报告"ORA-12704: 字符集不匹配"异常: 
尽管在[2]步中已经设置映射到AnsiString, 但是在执行HQL查询(SimpleQuery)的时候还是会报告这个异常.
后来发现只要采用传参形式的SimpleQuery就会出现这个异常, 而采用字面字符串的形式就没有任何问题, 因此解决的方法就是就是改用丑陋的字符串连接方式, 
例如:(注释掉的那一行执行的时候就会报告异常)

    public static TUser FindByName(string _name)
    {
        SimpleQuery query = new SimpleQuery(typeof(TUser), @"from TUser user where user.Name = '" + _name + "'");
        // SimpleQuery query = new SimpleQuery(typeof(TUser), @"from TUser user where user.Name = ?", _name);
        return ((TUser[])(ExecuteQuery(query)))[0];
    }

posted on 2012-12-03 10:42  一个石头  阅读(159)  评论(0)    收藏  举报