NHibernate SVN源码的一点小错误
最近学起了NHibernate。从SVN上把它的代码下下来,跟着文档用NHibernate.Tool.hbm2ddl里的SchemeExport来创建数据库,结果在创建一个标准的小Cat表时抛出异常:“Cannot define PRIMARY KEY constraint on nullable column in table…”。可我已经在hbm里定义了“<column name="CatId" sql-type="char(32)" not-null="true"/>”啊。
经过N次的设断点Debug,终于在ClassIdBinder.cs的223行看到了这么一句代码:
column.IsNullable = columnSchema.notnullSpecified ? columnSchema.notnull : false;
这句代码很明显有问题,翻译成中文大概是:如果scheme里定义了notnull这个属性,那么将IsNullable属性设为notnull属性。
OK,问题似乎找到了,加个!后重新编译执行创建表成功:
column.IsNullable = columnSchema.notnullSpecified ? !columnSchema.notnull : false;
后来我又把SF上发布的2.0.1GA的binary下载下来,用Reflector看了一下,也是一样的错误代码。。。