2011-05-18 60 views
1

我正在使用IBM DB2,并且没有GUID(uniqueidentifier)数据类型。相反,二进制文件存在字符。当我从该数据库创建实体数据库模型时,该类型在模型中标识为byte []。当我直接使用模型与数据库 - 一切正常(接受Guid.NewGuid().ToByteArray()作为主键/实体键),但我必须使用服务层。所以我选择了图层的WCF数据服务模型,并在那里添加了相同的数据库模型。尝试添加服务引用后,我不断收到错误:
自定义工具“DataServiceClientGenerator”失败。数据服务客户端代码生成失败:指定的模式无效。错误: (0,0):错误0129:EntityType'Model.TEST'中的属性'ID'无效。目前不支持类型为'Binary'的EntityKey属性。WCF数据服务二进制类型作为实体密钥

这是否意味着我无法使用二进制表作为PK?

PS顺便说一下DB2中的数据类型:你建议我在db2中使用什么来允许在不同数据库服务器之间简单地将数据从一个表复制到另一个表?

回答

1

DB2允许将较小列中的二进制数据作为唯一键,但必须将唯一ID作为INSERT语句的一部分或从触发器中分配。 FOR BIT DATA限定符在CREATE TABLE语句中用于告诉DB2您已定义的CHAR或VARCHAR列将存储二进制值。

DB2的内部唯一函数称为GENERATE_UNIQUE(),它返回CHAR(13)FOR BIT DATA值,该值在数据库中保证是唯一的(在单分区DB2服务器和InfoSphere Warehouse集群DB2数据库中) 。如果要存储来自DBMS外层的较大GUID,则应该能够将它们存储在CHAR/VARCHAR FOR BIT DATA COLUMN中。

相关问题