Пишу приложение которые часто (и много) перебирает данных с xlsx таблиц поставщиков.
Мое приложение имеет следующие классы: Артикулы ценовой группы:
using System;
using System.Collections.Generic;
namespace Parser.Models
{
public class Article
{
public int Id { get; set; }
public string Value { get; set; }
public int? GroupId { get; set; }
public Group Group { get; set; }
}
}
Конкуренты (с их наименованием и ценой):
using System;
using System.Collections.Generic;
namespace Parser.Models
{
public class Competitor
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int? GroupId { get; set; }
public Group Group { get; set; }
}
}
Непосредственно сама группа:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Parser.Models
{
public class Group
{
public int Id { get; set; }
public string SubGroup { get; set; }
public string Category { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public decimal FinalPrice { get; set; }
public decimal ExtraCharge { get; set; }
public decimal MarginMin { get; set; }
public decimal MarginAvg { get; set; }
public decimal MarginMax { get; set; }
public decimal EntryPrice { get; set; }
public decimal Price { get; set; }
public decimal MinPrice { get; set; }
public decimal AvgPrice { get; set; }
public decimal MaxPrice { get; set; }
public ICollection<Competitor> Competitors { get; set; }
public ICollection<Article> Articles { get; set; }
public Group()
{
Competitors = new List<Competitor>();
Articles = new List<Article>();
}
}
}
Главный класс приложения выглядит так:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Database;
using Parser.Models;
namespace Parser
{
static class Program
{
private static decimal Parse(string s)
{
if (string.IsNullOrEmpty(s))
{
return 0;
}
s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
return decimal.Parse(s, NumberStyles.Any,
CultureInfo.InvariantCulture);
}
static void Main(string[] args)
{
var file = new FileInfo("zoomos.xlsx");
using (var db = new Context())
using (ExcelPackage package = new ExcelPackage(file))
{
var worksheet = package.Workbook.Worksheets[1];
int colCount = worksheet.Dimension.End.Column; //get column Count
int rowCount = worksheet.Dimension.End.Row; //get row count
for (int i = 2; i <= rowCount; i++)
{
var competitors = new List<Competitor>();
var group = new Group
{
SubGroup = worksheet?.Cells[i, 2]?.Value?.ToString(),
Category = worksheet?.Cells[i, 3]?.Value?.ToString(),
Brand = worksheet?.Cells[i, 4]?.Value?.ToString() ?? "null",
Model = worksheet?.Cells[i, 5]?.Value?.ToString(),
FinalPrice = Parse(worksheet?.Cells[i, 6]?.Value?.ToString() ?? "0.0"),
ExtraCharge = Parse(worksheet?.Cells[i, 7]?.Value?.ToString() ?? "0.0"),
MarginMin = Parse(worksheet?.Cells[i, 8]?.Value?.ToString() ?? "0.0"),
MarginAvg = Parse(worksheet?.Cells[i, 9]?.Value?.ToString() ?? "0.0"),
MarginMax = Parse(worksheet?.Cells[i, 10]?.Value?.ToString() ?? "0.0"),
EntryPrice = Parse(worksheet?.Cells[i, 11]?.Value?.ToString() ?? "0.0"),
Price = Parse(worksheet?.Cells[i, 12]?.Value?.ToString() ?? "0.0"),
MinPrice = Parse(worksheet?.Cells[i, 15]?.Value?.ToString() ?? "0.0"),
AvgPrice = Parse(worksheet?.Cells[i, 17]?.Value?.ToString() ?? "0.0"),
MaxPrice = Parse(worksheet?.Cells[i, 18]?.Value?.ToString() ?? "0.0"),
};
var article = new Article
{
Value = worksheet?.Cells[i, 1]?.Value?.ToString(),
Group = group
};
for (int j = 19; j <= colCount; j++)
{
competitors.Add(new Competitor
{
Name = worksheet?.Cells[1, j].Value.ToString() ?? "No Name",
Price = Parse(worksheet?.Cells[i, j]?.Value?.ToString() ?? "0"),
Group = group
});
}
db.Groups.Add(group);
db.Articles.Add(article);
db.Competitors.AddRange(competitors);
db.SaveChanges();
}
}
}
}
}
Как можно до методов
db.Groups.Add(group);
db.Articles.Add(article);
db.Competitors.AddRange(competitors);
db.SaveChanges();
Сделать какую-либо проверку полей связных таблиц?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возникла такая проблема при входе в аккаунт в visual studio окно для ввода данных просто завислоМожет кто-то сталкивался с такой проблемой
Как используя Tcp протокол обменяться данными с другим компьютером по типу server-client и что для этого нужно, все что находил работает только в локальной...
connectionLimit при создании пула соединений с mysql выставляет ограничения для конкретного пользователя? Те если я выставлю это значение на 2 то только...