.Net Serialization, XmlDataReader, база данных SQL и атрибут Flags! - PullRequest
1 голос
/ 22 января 2010

Краткий обзор моей ситуации:

Я работаю над приложением N-уровня, которое во многом полагается на сериализацию, объекты взаимодействуют с базой данных, в основном, сериализованно, объекты и коллекции вставляются, обновляются и читаются как XML из хранимых процедур.

Для некоторых небольших классов данных я просто использую ExecuteNonQuery, Reader и т. Д. Для взаимодействия с данными, поскольку это проще, но я столкнулся с проблемой.

Данные вставляются в базу данных с помощью ExecuteNonQuery с использованием параметров - некоторые из вставленных данных являются свойствами Enums (хранятся в БД в виде целых чисел), к которым прикреплен атрибут FlagAttribute. На перечислении, таком как:

<Flags()> _
Public Enum Fruit As Integer
    <Description("None"), XmlEnum("0")> None = 0
    <Description("Apple"), XmlEnum("1")> Apple = 1
    <Description("Banana"), XmlEnum("2")> Banana = 2
    <Description("Orange"), XmlEnum("4")> Orange = 4
End Enum

Возвращаемое значение может представлять собой целочисленное значение 1, 3, 7 и т. Д. И может быть вставлено в базу данных, не используя сериализацию, когда оно, однако, читается как часть большой группы классов с использованием ExecuteXmlReader (заполнение Объект XmlReader), а затем его необходимо десериализовать; он не может быть, как например, 7, вызывает «Ошибка проверки экземпляра:« 7 »не является допустимым значением для Fruit», так как он ожидает, что он будет сериализован в формате :

<fruitOptions>1 2 4<fruitOptions>

В целом, это немного сбивает с толку, и я, вероятно, мог бы обойти это, сохранив его в базе данных в формате 1, 2, 4, но, к сожалению, не в типе int, в котором он сейчас находится.

У кого-нибудь есть идеи по этому поводу?

1 Ответ

0 голосов
/ 22 января 2010

Вам нужно будет спросить своего администратора базы данных или автора хранимой процедуры, которую вы используете.Похоже, они указали, что это поле не перечисление, а список.

...