Двоичный тип служб данных WCF в качестве ключа объекта - PullRequest
1 голос
/ 18 мая 2011

Я работаю с IBM DB2, и там нет типа данных GUID (uniqueidentifier).Вместо этого есть символ для двоичного кода.Когда я создаю модель базы данных сущностей из этой базы данных, этот тип определяется как byte [] в модели.Когда я использую модель напрямую с базой данных, все работает нормально (принимает Guid.NewGuid().ToByteArray() в качестве первичного ключа / ключа объекта), но я ДОЛЖЕН использовать уровень обслуживания.Поэтому я выбрал модель сервиса WCF для слоя и добавил туда ту же модель базы данных.После попытки добавить ссылку на сервис я получаю сообщение об ошибке:
Произошел сбой пользовательского инструмента DataServiceClientGenerator.Сбой генерации кода клиента службы данных: указана недопустимая схема.Ошибки: (0,0): ошибка 0129: Недопустимое свойство 'ID' в EntityType 'Model.TEST'.Свойства EntityKey типа Binary в настоящее время не поддерживаются.

Означает ли это, что я не могу использовать таблицы с двоичным кодом в качестве PK?

PS Кстати о типах данных в DB2: что вы предлагаете мне использовать в db2, чтобы разрешить простое копирование данных из одной таблицы в другую между разными серверами db?

1 Ответ

1 голос
/ 20 мая 2011

DB2 допускает двоичные данные в столбцах меньшего размера, которые также могут служить уникальными ключами, но вам придется присваивать уникальный идентификатор как часть инструкции INSERT или из триггера.Квалификатор FOR BIT DATA используется в операторе CREATE TABLE, чтобы сообщить DB2, что определенный вами столбец CHAR или VARCHAR будет хранить двоичные значения.

Внутренняя уникальная функция DB2 называется GENERATE_UNIQUE () и возвращает значение CHAR (13) FOR BIT DATA, которое гарантированно будет уникальным в базе данных (как на серверах DB2 с одним разделом, так и в кластерной DB2 InfoSphere Warehouseбазы данных).Если вы хотите хранить большие идентификаторы GUID, полученные из слоя за пределами СУБД, вы должны иметь возможность хранить их в CHAR / VARCHAR FOR BIT DATA COLUMN.

...