我正在尝试解析 XML 文件(4 级嵌套),并使用模型生成器将这些值附加到本地数据库,而我正在努力解决这部分问题,因此我非常感谢您的帮助。另外,正如您所见,我对这种语言和框架非常陌生。
<machines>
<machine>
<manufacturer>SDBSDBSDKB</manufacturer>
<name>NKSDBSDKJBDSKBDB</name>
<description>
<DEU>JBSDSBDKKJ</DEU>
<ENU>NDSIDBSSKBKJB</ENU>
</description>
<type>DSIBDSDBJKSD</type>
<number>0-200-84-3151</number>
<cfg_r>
<connection>JJSBJSBKDSJDBS</connection>
<cfg_r_text> JHBSJBDISBKDBSKDBSBDKBSDKLN </cfg_r_text>
<cfg_r_physical_unit_abbreviation> KBJSBDKSKJBSDSKJB
</cfg_r_physical_unit_abbreviation>
<cfg_r_displaytext> JSDHSDVSDVSDDSKBJDB
</cfg_r_displaytext>
</cfg_r>
</machine>
</machines>
这是我正在尝试使用的 XML 文件的类似部分。特别是,我正在尝试为“机器”数据库集(2 级)制作模型构建器。 “描述”对象是本机数据库集属性的一部分;这里我使用外键来映射它。就像说:
[ForeignKey(nameof(MachineDescription.Id))]
public int DescriptionID { get; set; }
这是
MachineDescription
类的描述:
public class MachineDescription
{
public int Id { get; set; }
public string DEU_desc { get; set; }
public string ENU_desc { get; set; }
[ForeignKey(nameof(Machine.Id))]
public MachineDescription MachineId { get; set; }
}
最后,这就是我的模型构建器:
modelBuilder.Entity<Models.Machine>().HasData(from machine in placeholder.Elements("machine")
select new Models.Machine
{
Id = idx++,
Manufacturer = machine.Element("manufacturer").Value,
Name = machine.Element("name").Value,
MachinesDecriptions.Append(
new MachineDescription
{
Id = descID++,
DEU_desc = machine.Element("description").Element("DEU").Value,
ENU_desc = machine.Element("description").Element("ENU").Value,
MachineId = descID
}),
Type = machine.Element("type").Value,
Number = machine.Element("number").Value,
});
我希望能在我的
MachineDescription
类中引用我的 Machine
方面获得一些帮助,并且手动添加它们不是一个选项。
就像 @Yitzhak Khabinsky 在评论中提到的那样,最好将 xml 传递到数据库并允许在那里解析它。
这里有一些示例代码可以帮助您入门。
Declare @xml xml;
Set @xml = N'<machines>
<machine>
<manufacturer>SDBSDBSDKB</manufacturer>
<name>NKSDBSDKJBDSKBDB</name>
<description>
<DEU>JBSDSBDKKJ</DEU>
<ENU>NDSIDBSSKBKJB</ENU>
</description>
<type>DSIBDSDBJKSD</type>
<number>0-200-84-3151</number>
<cfg_r>
<connection>JJSBJSBKDSJDBS</connection>
<cfg_r_text> JHBSJBDISBKDBSKDBSBDKBSDKLN </cfg_r_text>
<cfg_r_physical_unit_abbreviation> KBJSBDKSKJBSDSKJB
</cfg_r_physical_unit_abbreviation>
<cfg_r_displaytext> JSDHSDVSDVSDDSKBJDB
</cfg_r_displaytext>
</cfg_r>
</machine>
</machines>'
Select Node.Data.value('manufacturer[1]', 'varchar(100)') As Manufacturer,
Node.Data.value('name[1]', 'varchar(100)') As Name,
Node.Data.value('description[1]/DEU[1]', 'varchar(100)') As Description_DEU,
Node.Data.value('description[1]/ENU[1]', 'varchar(100)') As Description_ENU,
Node.Data.value('type[1]', 'varchar(100)') As Type,
Node.Data.value('number[1]', 'varchar(100)') As Number,
Node.Data.value('cfg_r[1]/connection[1]', 'varchar(100)') As Cfg_Connection,
Node.Data.value('cfg_r[1]/cfg_r_text[1]', 'varchar(100)') As Cfg_Text,
Node.Data.value('cfg_r[1]/cfg_r_physical_unit_abbreviation[1]', 'varchar(100)') As Cfg_Abbreviation,
Node.Data.value('cfg_r[1]/cfg_r_displaytext[1]', 'varchar(100)') As Cfg_DisplayText
From @xml.nodes('machines/machine') Node(Data)