Вооообщем, всем доброго времени суток дорогие шарписты.
Проблема, есть файл XML допустим с сайта cbr.ru. Я хотел бы перенести информацию из файла в SQl Server, что-бы потом через MVC показать результаты и (или) историю изменений. Варианты которые меня привели в никуда:
1) функция OPENROWSET в SQL, она создаёт гиперссылку для xml и соответственно просто показывает код XML-файла
2) Костыльный Code FIrst
using (AppDbContext context = new AppDbContext())
{
while (reader.Read())
{
Test test = new Test();
reader.ReadStartElement();
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Valute"))
{
if (reader.HasAttributes)
{
test.ValuteID = reader.GetAttribute("ID");
}
}
reader.ReadToDescendant("NumCode");
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "NumCode"))
{
test.NumCode = Convert.ToInt32(reader.ReadInnerXml());
}
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "CharCode"))
{
test.CharCode = Convert.ToString(reader.ReadInnerXml());
}
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Nominal"))
{
test.Nominal = Convert.ToInt32(reader.ReadInnerXml());
}
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Name"))
{
test.Name = Convert.ToString(reader.ReadInnerXml());
}
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "Value"))
{
test.Value = Convert.ToDecimal(reader.ReadInnerXml());
}
listTest.Tests.Add(test);
}
context.ListTests.Add(listTest);
await context.SaveChangesAsync();
}
Проблема здесь в том что создаются ненужные объекты в которых не содержатся необходимая информация, попросту пустышки.
Классы для передачи данных в БД:
public class Test
{
public int Id { get; set; }
public string ValuteID { get; set; }
public int NumCode { get; set; }
public string CharCode { get; set; }
public int Nominal { get; set; }
public string Name { get; set; }
public decimal Value { get; set; }
public ListTest ListTest { get; set; }
}
public class ListTest
{
public int Id { get; set; }
public List<Test> Tests { get; set; } = new List<Test>();
}