我正在使用另一家公司提供的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事件来获取每个实体添加到上下文时的保留。但我找不到解决主键问题的方法。能帮助我并指出正确的方向吗?
编辑:为了澄清,我的文件中只有一个模型实体,因此在添加它时肯定不会存在。但是相关实体(如数据源和条目)可能会在文件中多次出现,并将按照提供的顺序进行反序列化。
非常感谢帮助!
答案 0 :(得分:-1)
事实证明,我的模型首先是不正确的,并且有一些变化。 谢谢你的关注。