【问题标题】:WCF Data Services binary type as Entity KeyWCF 数据服务二进制类型作为实体键
【发布时间】:2011-05-20 14:23:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# entity-framework db2 guid wcf-data-services


    【解决方案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 列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多