1

快速概述我的情况:

我正在开发一个非常依赖序列化的 N 层应用程序,对象主要以序列化方式与数据库交互,对象和集合作为 XML 从存储过程中插入、更新和读取。

对于一些较小的数据类,我只是使用 ExecuteNonQuery、Reader 等与数据交互,因为它更容易,但我遇到了一个问题。

使用 ExecuteNonQuery 将数据插入到数据库中,使用参数 - 插入的一些数据是附加了 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,导致'Instance validation error:'7' is not a valid value for Fruit',因为它期望它以以下格式序列化:

<fruitOptions>1 2 4<fruitOptions>

总而言之,这有点令人困惑,我可以通过将其以 1、2、4 格式存储在数据库中来解决它,但遗憾的是,它不是当前所在的 int 类型。

有人对此有任何想法吗?

4

1 回答 1

0

您将不得不询问您的 DBA 或您正在使用的存储过程的作者。看来他们已经指定该字段不是枚举,而是列表。

于 2010-01-21T23:20:55.297 回答