• Как хранить информацию в БД о поставщиках когда они могут являться разынми сущностями?

    Vindicar
    @Vindicar
    Это, по сути, наследование. Абстрактный класс-предок (поставщик) и конкретные классы-потомки (физлицо, ИП, организация). Наследование обычно выражается в структуре БД так: создаётся таблица "Поставщик", содержащая общие для всех классов поля и имеющая свой ключ.
    Затем под каждый класс-потомок создаётся отдельная таблица, содержащая сведения, уникальные для этого класса. В этой таблице первичный ключ одновременно является внешним ключом, ссылающимся на таблицу "Поставщик". Иными словами, в таблице-потомке могут быть только записи с ключами, которые есть в таблице "Поставщик", а для каждой записи в "Поставщик" будет не более одной записи в таблице-потомке.

    В таблице "Поставщик" также может быть поле, указывающее на конкретный тип поставщика (физлицо, ИП, организация), т.е. в какой таблице искать остальные данные. Наличие или отсутствие этого поля - вопрос вкуса. В принципе, если нам нужны сведения о конкретном типе поставщика, мы можем попытаться сделать INNER JOIN с нужной конкретной таблицей. Это отсеет все записи других типов.
    Такой подход (без поля типа) позволяет избежать противоречий, когда запись находится в одной таблице-потомке, а поле указывает на другую. Но с другой стороны, если мы не знаем, какой конкретный тип у данного поставщика, нам придётся либо перебирать таблицы-потомки в рамках нескольких запросов к БД, либо делать LEFT JOIN со всеми таблицами-потомками, и смотреть, какие поля не будут NULL.

    Слабая сторона такой схемы в том, что связь по внешнему ключу не запрещает существование записей в нескольких таблицах-потомках, ссылающихся на одну и ту же запись в "Поставщике". Это придётся контролировать отдельно, триггерами или хранимыми процедурами.
    Ответ написан
    3 комментария
  • Можно ли настроить JWT в ASP NET CORE чтобы токен никогда не устаревал?

    vabka
    @vabka
    Токсичный шарпист
    Пропиши дату протухания JWT на какой-нибудь 2099 год и считай что это вечный токен.
    JWT можешь даже руками сгенерить, если тебе нужен только один.
    Ответ написан
    Комментировать
  • Можно ли назвать это обучение?

    GavriKos
    @GavriKos Куратор тега Unity
    Потому что надо начинать не с юнити, а с основ программирования.
    Юнити - это уже предметная область. А надо знать базу.
    Ответ написан
    Комментировать
  • Как запустить задачу меньше чем за 1 мс?

    Griboks
    @Griboks Куратор тега C#
    Вы неправильно понимаете суть генераторов сигнала. Он всего лишь периодически активирует схему. Вы не може изменять частоту генератора, потому что это физический прибор, а не программа. Тут есть два подхода:
    1) если необходима работа в реальном времени, то используйте while(true) и проверяйте время шага (как в играх game loop/update time/delta time).
    2) лучше всего дискретно моделировать процесс, а затем просто умножить количество шагов на шаг времени модели.
    Ответ написан
    Комментировать
  • Как передать список объектов из cshtml в контроллер через javascript?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Ответ написан
    Комментировать
  • Стоит ли читать книгу Шилдта по С#?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    C# 4.0 это очень древний, нет смысла его читать. Microsoft каждый год планируется выпускать новую версию .NET, старые версии поддерживаются +- 3 года.
    Конкретно за книги, они учат логики и философии кодинга, где можно рассказать примеры и объяснить принципы работы "Водой", что является очень важным аспектом, т.к. при собеседовании на фирме вам будут давать [возможно] тесты по языку и фреймворку, а так же тестовое задание, где будет оцениваться как работоспособность проекта, так и правильность написания.
    Если смотреть в сторону профессиональных курсов, то вас будут ругать даже за неправильно названные переменные, это уже если не говорить об самой логике написния задачи.
    Цель подобных книг - закрепить понимание языка, а не зазубрить синтаксис. Тот же metanit показывает сугубо синтаксис и как правильно его юзать, но он вас никогда не будет учить, где его использовать, как и при каких условиях, почему этот метод плох, а где он будет незаменим.
    Но для новичков лучше не наседать на книги, а делать упор на практику, но без "поводыря" очень сложно, т.к. если у вас не понимания самой логики построения, вам будет очень сложно что-то делать в будущем.

    Тут очень хороший пример с математикой: что бы быть хорошим математиком, ты должен не знать математику, ты должен её понимать. В программировании аналогично
    Ответ написан
    Комментировать
  • Чем асинхронность лучше многопоточности для чат-бота?

    @mayton2019
    Bigdata Engineer
    Насчет чят бота не скажу. Вообще скажу.

    Если задача связана с вычислением численных метдов например. Или рендерингом 3D. Или крипто-майнингом. Или нейро-сетей - где
    CPU -> 100%, I/O -> 0% то тогда тебе прямая дорого в мультипоточность (мультипроцессность). Количество тредов расчитывается обычно по формуле = количество ядер (иногда АЛУ/Threads) умноженное на коєффициентик. Подбирается экспериментально для конфигурации и среды исполнения. У меня для Java-11 выходило что на 4 ядра Core-i3 надо было 5 вычислительных потоков.

    Если в задаче главным дирижёром является канал I/O а нагрузка на расчет малаая (парсер) - то используют технологи асинхронизма. Это когда ваши вычисления подписываются на события I/O и 80% времени ничего не делают а только ждут события от I/O. При благоприятных условиях хендлеры могут потреблять вообще 0% ресурсов. Нет событий. Поэтому таких хендлеров можно поднять очень много. Пример - акторные технологии. Хендлер. Актор. Горутина. Пример 10 000 акторов обслуживается 10 потоками исполнителями.
    Ответ написан
    2 комментария
  • Можно ли в .NET (C#) при компиляции вычистить из подключенной библиотеки лишние функции?

    yarosroman
    @yarosroman
    C# the best
    https://docs.microsoft.com/en-us/dotnet/core/deplo...
    Данная фича ещё с core 3.1 присутствует, в 6 уже как стабильная
    Ответ написан
    Комментировать
  • Какой паттерн нужен для того чтобы познакомить две сущности?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем. собственно, проблема?
    Планета у вас опционально имеет игрока. При присваивании планете игрока она обязана дёрнуть соответствующий метод у игрока и добавиться ему в список планет.
    В Питоне я бы использовал слабоые ссылки на планеты в списке у игрока.
    Прежде чем искать идеальную архитектуру вам стоит понять для чего вам всё это нужно и не делать лишнего.
    Ответ написан
    Комментировать
  • Какую логику сделать для проверки верности вопроса в приложении тест?

    0xD34F
    @0xD34F
    Начать следует не с какой-то там логики, а со структуры данных, что содержит вопросы. То, что есть сейчас, никуда не годится. Что, если завтра вместо трёх вариантов ответа надо будет сделать четыре? Будете добавлять ещё по два свойства в каждый объект в массиве вопросов, а в компоненте закопипастите ещё один input? А если в разных вопросах должно будет быть разное количество вариантов ответа? Что тогда?

    Варианты ответа складываете в массив, а корректный вариант обозначаете через его индекс:

    const questions = [
      {
        text: 'Выберите верное утверждение',
        answers: [
          'СССР распался в 1997 году',
          'Солнце вращается вокруг Земли',
          'шестью восемь - двадцать три',
        ],
        correctAnswer: 1,
      },
      {
        text: '...',
        answers: [ '...', '...', ... ],
        correctAnswer: ...,
      },
      ...
    ];

    В компоненте вопроса вместо того, чтобы копипастить input'ы, делаете цикл по вариантам ответа:

    function Question(props) {
      const onChange = e => props.onAnswerChange(+e.target.value);
    
      return (
        <div>
          <h3>{props.question.text}</h3>
          <ol>
            {props.question.answers.map((n, i) => (
              <li>
                <label>
                  <input
                    type="radio"
                    value={i}
                    checked={props.answer === i}
                    onChange={onChange}
                  />
                  {n}
                </label>
              </li>
            ))}
          </ol>
        </div>
      );
    }

    В родительском компоненте храните массив ответов:

    function App(props) {
      const [ answers, setAnswers ] = useState(Array(props.questions.length).fill(null));
    
      const updateAnswer = (questionIndex, answer) =>
        setAnswers(answers.map((n, i) => i === questionIndex ? answer : n));
    
      return (
        <div>
          {props.questions.map((n, i) => (
            <Question
              question={n}
              answer={answers[i]}
              onAnswerChange={answer => updateAnswer(i, answer)}
            />
          ))}
        </div>
      );
    }

    Ну и возвращаясь к вашему вопросу, чего там надо было?

    не получается сделать грамотную проверку правильного ответа...

    Чтобы проверить правильность ответа, надо сравнить его со значением свойства correctAnswer у соответствующего (с тем же индексом) вопроса. Например, считаем количество правильных ответов:

    const correctAnswersCount = answers.reduce((acc, n, i) => acc + (n === questions[i].correctAnswer), 0);

    ...и одновременно вывести верные ответы

    Поскольку свойство, обозначающее правильный ответ, является его индексом, просто достаём соответствующие элементы из массивов с вариантами ответа:

    const correctAnswers = questions.map(n => n.answers[n.correctAnswer]);

    Ну а массив строк вывести - надеюсь, справитесь сами.
    Ответ написан
    1 комментарий
  • Как исправить ошибку A second operation was started on this context instance before a previous operation completed?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    По сообщению очевидно, что ты начал вторую операцию на ef-овском DbContext до того, как закончилась предыдущая.
    Такое обычно случается, когда ты пытаешься работать с DbContext параллельно из нескольких потоков или забыл написать await у SaveChanges. (это в ошибке и написано, буквально)
    Также в сообщении об ошибке дана ссылка на статью, которую следует прочитать, чтобы не допускать таких ошибок в будущем.

    Kafka, Postgres, и "100 данных подряд" тут ни при чём.
    Ответ написан
    Комментировать
  • Как распаковать список в C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Ну тут вопрос, зачем делать список из обжектов, если можно List<List<double[]>>, но если повлиять не можешь и точно знаешь что содержимое именно такое:

    var items = orders_
     .Cast<List<object>>() // В случае с List<List<double[]>> просто надо убрать эти вызовы Cast.
     .SelectMany(x=>x)
     .Cast<double[]>() // и этот тоже
     .SelectMany(x=>x);
    
    Console.WriteLine(string.Join(", ", items));
    Ответ написан
    1 комментарий
  • Как с помощью GPS и Arduino, надёжно и безопасно вывести человека из леса?

    @rPman
    С точки зрения интерфейса, наплечное устройство должно показывать направление до дома и опционально - расстояние, плюс кнопку сос и в идеале - голосовая связь, но все радиокоммуникации зарегулированы в стране (в лесу тупо может не быть привычной сотовой связи, напоминаю спутниковая тоже зарегулирована так что ее цена неподъемна для большинства), для стороннего наблюдателя это должно быть приложение, показывающее на карте выбранного пользователя.

    Создание своего устройства, с высоким уровнем защиты (особенно защита от холода создаст проблем) - проблема, которую сложно будет решить тем кто задает вопросы такого уровня. Ищите лучше готовые решения.

    p.s. представь ты создал устройства, раздал из людям, но из-за ошибке в реализации (первый релиз, баги, обычное дело) люди, понадеявшиеся на твое устройство - зашли в болото и погибли, ты готов к подобной ответственности?
    Ответ написан
    Комментировать
  • Как сделать асинхронный while цикл?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    ConsoleApp\Program.cs
    // See https://aka.ms/new-console-template for more information
    
    await DoWork();
    
    async Task DoWork()
    {
        int counter = 0;
        while (true)
        {
            Console.WriteLine($"TEST {++counter}");
            await Task.Delay(900);
        }
    }


    ConsoleApp\ConsoleApp.csproj
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
    </Project>
    Ответ написан
    Комментировать
  • Как сделать асинхронный while цикл?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вместо Thread.Sleep использовать await Task.Delay.
    Или таймеры.
    Или запускать в отдельном потоке.
    Ответ написан
    Комментировать
  • Как исправить ошибку на C#?

    Начните с перевода "no suitable method found to override"
    Ответ написан
    2 комментария
  • Как логгировать в EntityFramework штатными средствами net core?

    byte916
    @byte916 Автор вопроса
    Если кратко, то логгер, судя по всему, синглтон, а БД по умолчанию не синглтон, и из-за этого возникает описанная проблема.
    В общем, вот решение задачи.
    Вместо контекста бд пробрасываем ServiceProvider
    Startup.cs

    loggerFactory.AddProvider(new DbLoggerProvider(app.ApplicationServices));


    В логгере создаем scope и получаем из сервиспровайдера экземпляр БД
    DbLogger.cs

    using (var scope = _serviceProvider.CreateScope())
    {
       var db = scope.ServiceProvider.GetRequiredService<CuDb>();
    
       db.Logs.Add(new CheckUpDb.Log() { Date = DateTime.UtcNow, LogLevel = logLevel, Message = formatter(state, exception) });
       db.SaveChanges();
    }

    Ответ написан
    Комментировать
  • Когда мы создаем list и в элементы добавляем значимые типы данных происходит ли упаковка?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Если используешь List<T> и это T - значимый тип данных, который ты хочешь засунуть, то упаковки не будет.
    Если используешь ArrayList или T-ссылочный тип (интерфейс или object), то упаковка будет.
    Ответ написан
    1 комментарий
  • Как написать решение для формулы в c#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Степени - Math.Pow
    Модуль - Math.Abs
    Синус - Math.Sin
    Ответ написан
    Комментировать
  • Мне нужно получать текст из выделенного элемента listBox.Как это сделать?

    @killman Автор вопроса
    Нашёл решение сам надо просто:
    string someValue = listBox1.Text;
    Ответ написан
    Комментировать