实体框架返回不完整的xml数据

时间:2012-12-19 19:57:04

标签: c# sql-server xml entity-framework serialization

EntityFramework返回xml字段的不完整数据。 我序列化数据并将其保存在db中的xml字段中。丢失的数据在xml中的Images节点值中也被序列化为一个serized对象。当我对字段对象进行序列化时,会发生值的格式化。

我在图片中丢失的数据在哪里 - >价值领域以及为什么消失?

这就是我在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;
            }
        }

2 个答案:

答案 0 :(得分:0)

我认为你需要编写一个存储过程来返回xml字段数据。对于Entity Framework,您需要编写类似下面的内容以获取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);
    }
}

答案 1 :(得分:0)

我认为在反序列化过程中数据丢失,或者由于您的疲劳而导致错误(我的意思是,您在比较时可能会看到不同的实体,并且您认为存在错误)。

无论哪种方式,排除序列化问题的另一种方法是将序列化保存为其他东西,或者通过将ArrayOfImages添加为类成员来避免在xml中使用xml(即使没有任何问题)而不只是数组中的另一个键/值对。