每个表都必须有主键.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
每个表都必须有主键.doc

每个表都必须有主键 自增字段(native) id name=Id column=ID type=Int32 unsaved-value=0 generator class=native/ /id 3、one-to-many 出错原因 1、Could not excute query :HQL语句出错 2、in expected: bumen [select bumen from Bumen bumen]:未将配置文件属性改成“嵌入的资源” 3、could not resolve property:查询语句中,定义类对象后,具体字段区分大小写(应与类中变量名同) 4、The following types may not be used as proxies:类中定义变量未添加virtual 5、多表关联,主外键 6、可以将查询出来的属性组建成一个新的类使用NHibernate, Oracle Clob/NClob无法插入、乱码问题 服务器Oracle 9i,客户端Oracle 10g。 问题1: NHibernate配置的Driver为NHibernate.Driver.OracleClientDriver,存入Clob、NClob字段,值比较大时报错,错误信息 中文:ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值 英文:ORA-01461: can bind a LONG value only for insert into a LONG column Google一下有很多人碰到这个问题,有人猜测是MS System.Data.OracleClient的一个Bug,方法是改用Oracle提供的Oracle.DataAccess。 解决方法: 下载安装ODAC (Oracle Data Access Components),将NHibernate的Driver配置为NHibernate.Driver.OracleDataClientDriver,确保运行目录下有Oracle.DataAccess.dll文件。 问题2: 使用Oracle.DataAccess之后可以向一个NClob字段中插入长文本,但文本有的情况下会变成乱码。具体表现是输入一些中文单词,保存后正常;输入英文字符,保存后正常;输入一段中英文混杂的html,保存后变成乱码。 排除了服务器、客户端Oracle字符集设置问题。跟踪NHibernate,在调用IDbCommand执行SQL语句时,参数中的值是正常的,因此排除了程序中对文本的编码、解码问题。 经过测试,使用下面的方式存入NClob的值不会变为乱码: using Oracle.DataAccess.Client; OracleConnection?con?=?new?OracleConnection(......); con.Open(); OracleTransaction?tran?=?con.BeginTransaction(); OracleCommand?command?=?con.CreateCommand(); command.CommandType?=?CommandType.Text; command.CommandText?=?update?cms_template?set?temp_content=:p?where?temp_id=4; OracleParameter?param?=?command.CreateParameter(); param.ParameterName?=?:p; param.Value?=?this.textBox1.Text; param.OracleDbType?=?OracleDbType.NClob; command.Parameters.Add(param); command.ExecuteNonQuery(); tran.Commit(); con.Close(); 最关键的一句是将param.OracleDbType设置为OracleDbType.NClob,这样Oracle.DataAccess就知道怎样正确处理这个参数了。 NHibernate为了兼容多数据库,统一使用IDbParameter接口,对于NHibernate内部来讲这个问题不好解决,我的方法是为CLob、NClob类型的属性实现一个NHibernate.UserTypes.IUserType,在它的NullSafeSet方法中,修改IDbCommand中该字段对应的IDbParameter的OracleDbType值,具体实现如下: public?abstract?class?PatchForOracleLobField?:?IUse

文档评论(0)

gsgtshb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档