【问题标题】:Entity Framework returns incomplete xml data实体框架返回不完整的 xml 数据
【发布时间】:2012-12-19 19:57:03
【问题描述】:

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;
            }
        }

【问题讨论】:

  • 谢谢!这解决了我的问题.....
  • 您确定您正在查看 SQL 和 EF 查询中具有相同 id 的项目吗?因为您提供的示例似乎是一个格式化的 xml,但只有一个空的 arrayOfImage,没有子级。所以它不像 EF 正在修剪 xml 内部文本或其他东西。
  • @dutzu 是的,我很确定。我的其他项目都不包含图像节点。
  • 您有什么有用的答案吗?然后接受它。您的问题将被标记为已回答,并且不再列在未回答问题列表中。
  • @espvar 如果您有答案,请将此问题标记为已回答。

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


【解决方案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);
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多