1

EntityFramework 为 xml 字段返回不完整的数据。我序列化数据并将其保存在数据库中的 xml 字段中。缺少的数据在 xml 中的 Images 节点值也被序列化了一个序列化的对象。当我序列化字段对象时,会发生值的编码。

图片 -> 值字段中的缺失数据在哪里?为什么它消失了?

这就是我在我的 ms sql xml 字段中的内容:

<ArrayOfField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Field>
    <Key>Images</Key>
    <Value>&lt;ArrayOfImage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  &lt;Image&gt;
    &lt;Name&gt;Penguins.jpg&lt;/Name&gt;
    &lt;Path&gt;~/Fileshare/Pages/6/Penguins.jpg&lt;/Path&gt;
    &lt;AltText&gt;Test&lt;/AltText&gt;
  &lt;/Image&gt;
  &lt;Image&gt;
    &lt;Name&gt;Tulips.jpg&lt;/Name&gt;
    &lt;Path&gt;~/Fileshare/Pages/6/Tulips.jpg&lt;/Path&gt;
    &lt;AltText&gt;Test&lt;/AltText&gt;
  &lt;/Image&gt;
&lt;/ArrayOfImage&gt;</Value>
  </Field>
  <Field>
    <Key>Test</Key>
    <Value>Test</Value>
  </Field>
  <Field>
    <Key>MyEditor</Key>
    <Value />
  </Field>
</ArrayOfField>

这是 EF 返回的内容:

<ArrayOfField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Field><Key>Images</Key><Value>&lt;ArrayOfImage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /&gt;</Value></Field><Field><Key>Test</Key><Value>Test</Value></Field><Field><Key>MyEditor</Key><Value /></Field></ArrayOfField>

我像这样从 EntityFramework 获取数据:

  public Item Get(int id)
        {
            using (var context = new Entities())
            {
                var item = context.Items.SingleOrDefault(x => x.ID == id);
                return item;
            }
        }
4

2 回答 2

1

我认为您需要编写一个存储过程来返回 xml 字段数据。对于实体框架,您需要编写如下内容来获取 xml 数据的完整列表

EntityCommand command = connection.CreateCommand();
command.CommandText = "XXXX";
command.CommandType = CommandType.StoredProcedure;

using (EntityDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess))
{
    while (reader.Read())
    {
          str = str + reader.GetString(0);
    }
}
于 2012-12-20T03:28:23.197 回答
0

我认为要么数据在反序列化过程中丢失,要么是由于您的疲劳而导致的错误(我的意思是,您在比较时可能正在查看不同的实体并且您认为有问题)。

无论哪种方式,排除序列化问题的另一种方法是将其序列化为其他内容,或者通过将 ArrayOfImages 添加为类成员而避免在 xml 中包含 xml(即使不应该有任何问题),而不仅仅是数组中的另一个键/值对。

于 2012-12-20T07:25:38.217 回答