实体框架从XML加载实体

时间:2014-07-23 15:08:18

标签: c# xml entity-framework xsd

我正在使用另一家公司提供的XML和XSD来使用XSD.exe生成我的模型类,我需要反序列化我的XML并将创建的实体添加到EF。

XmlSerializer serializer = new XmlSerializer(typeof(Model));

FileStream stream = new FileStream(@"D:\Test\my.xml", FileMode.Open);
Model data = (Model)serializer.Deserialize(stream);

using (DatabaseContext ent = new DatabaseContext())
{
    ent.Model.Add(data);
    ent.SaveChanges();
}

XML看起来像这样:

<Model>
  <Entry id="1">
    <DataSource id="x">
    </DataSource>
  </Entry>
  <Entry id="2">
    <DataSource id = "x">
    </DataSource>
  </Entry>
<Model>

DataSources和Entries可以使用相同的ID(主键)多次包含在给定的XML中,这会在保存更改时导致主键异常。我无法更改文件,所以我必须设置我的代码,使EF理解只添加一次数据源,并保持关系完整。

我尝试使用ObjectStateManager和ObjectStateManagerChanged事件来获取每个实体添加到上下文时的保留。但我找不到解决主键问题的方法。能帮助我并指出正确的方向吗?

编辑:为了澄清,我的文件中只有一个模型实体,因此在添加它时肯定不会存在。但是相关实体(如数据源和条目)可能会在文件中多次出现,并将按照提供的顺序进行反序列化。

非常感谢帮助!

1 个答案:

答案 0 :(得分:-1)

事实证明,我的模型首先是不正确的,并且有一些变化。 谢谢你的关注。

相关问题