Почему не происходит запись в локальную базу данных?

215
16 ноября 2021, 20:50

У меня есть программа, которая парсит данные с сайта и сохраняет их по одному экземпляру в файлы f1.json , f2.json и f3.json c некоторой задержкой. Во время начала сохранения она создает файл ".locker" для каждого файла (f1,f2,f3) т.е создается 1.locker, 2.locker, 3.locker. После того как экземпляр был сохранен файл конкретный файл ".locker" удаляется. Мой Windows-service должен реагировать на удаление этого файла и парсить json, а затем сохранять в базу данных, но он читает json и почему-то не сохраняет в базу данных. RecordEntry служит для проверки прочтен ли json. В итоге RecordEntry отрабатывает нормально и записывает в txt файл, а сontext..add(someObj) context.savechanges не работают и никаких исключений не выкидывают. Если повторить парсинг и добавление в консольном приложении, то все работает, но мне нужен winserv. p.s ".locker" служит в роли монитора для потоков в программе парсер, а ".Slocker" в роли мониторов для процессов т.е они говорят о том, что данный файл сейчас занят каким-либо потоком или процессом.

public partial class WinServParseJson : ServiceBase
{
    Watcher w;
    public WinServParseJson()
    {
        InitializeComponent();
        this.CanStop = true;
        this.CanPauseAndContinue = true;
        this.AutoLog = true;
    }
    protected override void OnStart(string[] args)
    {
        w = new Watcher();
        Thread wThread = new Thread(new ThreadStart(w.Start));
        wThread.Start();
    }
    protected override void OnStop()
    {
        w.Stop();
    }
}
public class Watcher
{
    FileSystemWatcher watcher;
    object locker = new object();
    bool enabled = true;
    WorkWithJson js;
    //MyDbContext context = new MyDbContext();    
    public Watcher()
    {
        watcher = new FileSystemWatcher("C:\\Users\\badyi\\source\\repos\\OS_homework4\\VKParser\\VKParser\\bin\\Debug");
        watcher.Deleted += Watcher_Deleted;
        js = new WorkWithJson();
    }
    private void RecordEntry<T>(T input)
    {
        lock (locker)
        {
            using (StreamWriter writer = new StreamWriter("C:\\templog.txt", true))
            {
                writer.WriteLine($"{input}");
            }
        }
    }
    private void Watcher_Deleted(object sender, FileSystemEventArgs e)
    {
        string filePath = e.FullPath;
        if (filePath == "C:\\Users\\badyi\\source\\repos\\OS_homework4\\VKParser\\VKParser\\bin\\Debug\\1.locker")
        {
            FileStream setlock = new FileStream("1.Slocker", FileMode.OpenOrCreate);
            using (var context = new MyDbContext())
            {
                TextPost tp = js.read<TextPost>(1);
                context.id_texts.Add(tp);
                context.SaveChanges();
                setlock.Close();
                RecordEntry<TextPost>(tp);
                File.Delete("1.Slocker");
            }
        }
        else if (filePath == "C:\\Users\\badyi\\source\\repos\\OS_homework4\\VKParser\\VKParser\\bin\\Debug\\2.locker" ) 
        {
            FileStream setlock = new FileStream("2.Slocker", FileMode.OpenOrCreate);
            using (var context = new MyDbContext())
            {
                LinkPost lp = js.read<LinkPost>(2);
                context.id_links.Add(lp);
                context.SaveChanges();
                setlock.Close();
                File.Delete("2.Slocker");
                RecordEntry<LinkPost>(lp);
            }
        }
        else if (filePath == "C:\\Users\\badyi\\source\\repos\\OS_homework4\\VKParser\\VKParser\\bin\\Debug\\3.locker")
        {
            FileStream setlock = new FileStream("3.Slocker", FileMode.OpenOrCreate);
            using (var context = new MyDbContext())
            {
                ImgPost ip = js.read<ImgPost>(3);
                context.id_imglinks.Add(ip);
                context.SaveChanges();
                setlock.Close();
                File.Delete("3.Slocker");
                RecordEntry<ImgPost>(ip);
            }
        }
    }
    public void Start()
    {
        watcher.EnableRaisingEvents = true;
        while (enabled)
        {
            Thread.Sleep(1);
        }
    }
    public void Stop()
    {
        watcher.EnableRaisingEvents = false;
        enabled = false;
    }
}

Функция сохранения из программы-парсер

    internal static void save<T>(T input, int i)
    {
            string nameFile = "f" + i.ToString() + ".json";
            DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(T));
            FileStream setlock = new FileStream(i.ToString() + ".locker", FileMode.OpenOrCreate);
            using (FileStream f = new FileStream(nameFile,FileMode.Create))
            {
                jsonFormatter.WriteObject(f, input);
            }
            setlock.Close();
            File.Delete(i.ToString() + ".locker");
            Thread.Sleep(500);
    }

connection string в appsConfig

  <connectionStrings>
    <add name="DbConnectionString" connectionString="data source=(localdb)\MSSQLLocalDB;Initial Catalog = DataBaseEsketit;Integrated Security=True;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

class MyDbContext

public class MyDbContext : DbContext
{
    public MyDbContext() : base("DbConnectionString")
    {
    }
    public DbSet<TextPost> id_texts { get; set; }
    public DbSet<LinkPost> id_links { get; set; }
    public DbSet<ImgPost> id_imglinks { get; set; }
}
READ ALSO
Получить GameObject, если он не активен

Получить GameObject, если он не активен

Всем приветУ меня есть на одной линии машина и три триггера, идущих друг за другом

190
Не получается записать текст в файл С#

Не получается записать текст в файл С#

Не записывает текст в файл=( Подскажите, пожалуйста, что не так?

138
Вид ячеек DataGridView C#

Вид ячеек DataGridView C#

Есть код:

121
Как закрасить ячейку со значением максимума двумерного массива c#?

Как закрасить ячейку со значением максимума двумерного массива c#?

У меня есть двумерный массив случайных целых чисел, которые находятся в массиве текстбоксовЯ нашла максимум и вывела его на Label1

271