Как узнать, вставляет ли мое консольное решение данные в мою базу данных в режиме реального времени? Используя журналы? - PullRequest
0 голосов
/ 08 января 2019

Я новичок в ef core, у меня есть консольное решение в .net core, которое ссылается на несколько проектов библиотек классов .NET Standard 2.0. context.SaveChanges слишком длинный, потому что приложение имеет дело с огромными данными. это, по-видимому, нормально, и из-за этого мне нужно знать, если данные в настоящее время вставляются или нет (в режиме реального времени) с использованием ведения журнала консоли, я попробовал Serilog в качестве решения для ведения журнала, но не знаю, как использовать его для вставленных данных? Я широко открыт, если у вас есть другое решение.

Вот немного моей программы.

static void Main(string[] args)
{
    double pp = 0.8;
    Error error = new Error();
    Cleaner cleaner = new Cleaner();
    Stats stats = new Stats();

    var log = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .WriteTo.Console()
                    .CreateLogger();

    using (var context = new DbWeightWizardContext())
    {
        context.ChangeTracker.AutoDetectChangesEnabled = false;

        using (var transaction = context.Database.BeginTransaction())
        {
            try
            {
               log.Information("Nettoyage des données en cours... ");
               var pickingsTest = context.PickingTemps.Where(p => p.FLTrait == false).ToList();


                var v1 = cleaner.ClearNullValues(pickingsTest);
                Log.Information("Null values cleared :" + v1.Count());
                var v2 = cleaner.ClearOutliersValues(v1,pp);
                Log.Information("Outliers values cleared :" + v2.Count());
                log.Information("Nettoyage done, Insertion en cours..");

                error.ErrorNullValues(pickingsTest, context);

ErrorNullValues реализует в нем SaveChanges, поэтому я хочу знать, что он хранит в реальном времени до транзакции.commit ()?

1 Ответ

0 голосов
/ 08 января 2019

Вы можете добавить каждую запись в список после того, как они будут созданы для последующего использования в Datatable для решения ниже.

Это решение будет заключаться в том, чтобы регистрировать и экспортировать в CSV-файл , который может содержать любой тип ведения журнала в виде DataTable , это позволит вам настроить собственный ведение журнала , чтобы вы могли видеть текущее состояние проекта, вот пример:

Метод ToCSV:

//---------------------------------------------------------String Tool 2-----------------------------------------------------
public static class StringTool2
{
    /// <summary>
    /// Get a substring of the first N characters.
    /// </summary>
    // First possible truncate method
    public static string Truncate(string source, int length)
    {
        if (source.Length > length)
        {
            source = source.Substring(0, length);
        }
        return source;
    }

    /// <summary>
    /// Get a substring of the first N characters. [Slow]
    /// </summary>
    // Second possible truncate method
    public static string Truncate2(string source, int length)
    {
        return source.Substring(0, Math.Min(length, source.Length));
    }

    // Method to export (Datatable) to csv
    public static void ToCSV2(this DataTable dtDataTable, string strFilePath)
    {
        StreamWriter sw = new StreamWriter(strFilePath, false);
        //Datatable generation
        for (int i = 0; i < dtDataTable.Columns.Count; i++)
        {
            //Create comma separated values, retrieving from datatable
            sw.Write(dtDataTable.Columns[i]);
            if (i < dtDataTable.Columns.Count - 1)
            {
                sw.Write(",");
            }
        }
        sw.Write(sw.NewLine);
        // Foreach row in the DataTable
        foreach (DataRow account in dtDataTable.Rows)
        {
            for (int i = 0; i < dtDataTable.Columns.Count; i++)
            {
                if (!Convert.IsDBNull(account[i]))
                {
                    string value = account[i].ToString();
                    if (value.Contains(','))
                    {
                        value = String.Format("\"{0}\"", value);
                        sw.Write(value);
                    }
                    else
                    {
                        sw.Write(account[i].ToString());
                    }
                }
                if (i < dtDataTable.Columns.Count - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
        }
        sw.Close();
    }
}
//----------------------------------------------------------------------------------------------------------------------------------

вызов и использование метода:

// Calling the .ToCSV2 method and entering parentheses - Choosing file path and dataTable.
            StringTool2.ToCSV2(dt, "C:\\Users\\user\\Documents\\Processed\\CloneSuppliersFailed" + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.DayOfYear + DateTime.Now.Month + DateTime.Now.Year + ".csv");

Вам может понадобиться импортировать несколько вещей, которые вам понадобятся:

using System.IO;
using Quartz;

Это создаст файл .CSV в указанном вами месте, чтобы вы могли наблюдать за ним, хотя это не реальное время, скажем, вы можете взломать код, прежде чем Transactions.commit (), чтобы проверить содержимое созданного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...