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><ArrayOfImage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Image>
<Name>Penguins.jpg</Name>
<Path>~/Fileshare/Pages/6/Penguins.jpg</Path>
<AltText>Test</AltText>
</Image>
<Image>
<Name>Tulips.jpg</Name>
<Path>~/Fileshare/Pages/6/Tulips.jpg</Path>
<AltText>Test</AltText>
</Image>
</ArrayOfImage></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><ArrayOfImage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /></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;
}
}
答案 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(即使没有任何问题)而不只是数组中的另一个键/值对。