Разобрать "0" / "1" как bool в (.NET 4.0 C #) Sync Framework 4.0 CTP - PullRequest
5 голосов
/ 29 апреля 2011

Возможно ли иметь какой-то конвертер типов, который позволяет Sync Framework обрабатывать строку "0" / "1" как логические значения для false / true. Согласно документации bool.parse она не поддерживается по умолчанию, так есть ли способ обойти это?

Подробнее, если кто-то может предложить другой подход к этой проблеме: У меня есть собственная клиентская реализация Sync Framework для Android, и, поскольку она использует базу данных SQLite, я не могу применить какой-либо строгий тип данных к полю таблицы. Я мог бы придумать соглашение для обозначения логического поля, скажем, с префиксом «Is», но это было бы противно. Другое дело, что логические значения в SQLite обрабатываются как числовой тип, поэтому при вставке / обновлении логического значения false / true в базу данных SQLite они автоматически преобразуются в 0/1, и я не хочу вводить некоторое значение TRUE / FALSE = 1/0 на стороне Android ,

Любые мысли приветствуются.

[ОБНОВЛЕНИЕ] Подробнее: Серверная часть состоит из некоторых служб, которые используют Microsoft Sync Framework 4.0 CTP. Там нет ничего для настройки, кроме создания области и так далее. Клиентская сторона генерирует набор изменений и передает его на сервер в формате JSON. Набор изменений происходит из базы данных SQLite (а SQLite не имеет никакого собственного логического представления, кроме числового 0/1), поэтому при чтении базы данных нет никаких признаков того, что поступающие данные имеют логический тип. Значение поля сериализуется в объект JSON в виде строки с числовым значением («0» или «1»), и, таким образом, сбой на стороне сервера при попытке проанализировать его как bool.

Кстати, можно обойти это, если выполнять одностороннюю синхронизацию между клиентом и сервером. Я вручную устанавливаю тип поля сущности на стороне сервера равным байту, и Sync Framework прекрасно использует его как «битовый» тип базы данных. Этот обходной путь не работает для сервера-клиента, хотя '.

Ответы [ 4 ]

2 голосов
/ 29 апреля 2011

Обычным способом в C # / .NET является использование Convert.ToBoolean()

0 голосов
/ 03 мая 2011

Так что это кажется невозможным сделать то, что я прошу, любым простым способом. В конце я решил написать дополнительную функциональность в библиотеку синхронизации Android для анализа определений таблиц SQLite и использования описаний полей для форматирования исходящих данных синхронизации.

Спасибо всем за ваши усилия.

0 голосов
/ 01 мая 2011

для битов Sync Framework, вы пытались реализовать Interceptors, чтобы перехватить изменения и выполнить преобразование? см .: Как: расширить бизнес-логику на сервере с помощью перехватчиков

0 голосов
/ 29 апреля 2011

Я не хочу вводить некоторые ИСТИНА / ЛОЖЬ = 1/0 преобразования на стороне Android

Кажется, вам придется это сделать, поскольку в SQLite нет логического типа.

boolean active = cursor.getInt(column_idx)==1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...