Ответы пользователя по тегу .NET
  • Entity Framework - не нужен?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    EF вам дает возможность автоматически транслировать экспрешны в диалекты SQL и маппить это на удобные дотнетные сущности. С голым ADO.NET вы будете делать то же самое, но руками.

    куда логичнее было бы, чтобы в объекте Order было поле типа Client, в котором лежит объект компании-получателя, а не условный int с идентификатором.

    Предлагаемая вами схема денормализована, вообще говоря, это не очень хорошо. Но посмотрите на Owned Types для EF Core и на Complex Types для EF6, мне кажется, что это то, что вы хотели бы - "встраивать" один объект в другой, сохраняя всё в единой таблице.

    Да, EF не то, чтобы позволяет сильно отходить от классической реляционной модели, но с ним можно точечно звать raw sql-queries, что даст больше гибкости там, где это необходимо.
    Ответ написан
    2 комментария
  • Пoдскажите базовые правила работы с миграциями в asp.net?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Проблемы все те же, что и для ручных миграций, только пишутся они сами и все действия фиксируются в миграциях.

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

    Процесс "приведения в порядок" можно закриптовать, поэтому сильно большой проблемой это не должно быть.
    Ответ написан
    Комментировать
  • Добавление записей в доп. таблицу, имеющей связь с основной таблицей?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    var newPerson = new People {
       //Id = model.Id,
       Name = model.Name,
       Treatment = new Treatment {
            //...
       },
    };
    
    dbCcontext.People.Add(newPerson);
    dbCcontext.SaveChanges();
    Ответ написан
    5 комментариев
  • Как организовать паттерн "репозиторий" с возможностью переключаться на разные СУБД, а именно в c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Это для получается для каждого репозитория нужно писать getter/setter в главном репозитории? Очень много и накладно.

    Это можно решать метапрограммированием через Reflection API и дженерики.

    Для переключения между субд я решил сделать Фабрику. Но на этом и возник ступор.

    Реализации фабрик для этого уже написаны и называются IoC-контейнерами. Принципы работы с ними можно посмотреть здесь. Ну или где угодно в интернете. Популярные реализации: Castle Windsor, Unity, Ninject и т.п.

    Суть в том, что контейнер сначала можно настроить:
    interface IMyEntityRepository {...}
    class MySqlEntityRpository: IMyEntityRepository  {...}
    ...
    config.Bind<IMyEntityRepository>().ImplementsBy<MySqlEntityRpository>();


    А потом позвать:
    var repo = ioCContainer.Get<IMyEntityRepository>();


    Кроме очевидных плюсов, IoC-контейнеры могут:
    1. собирать полный граф зависимостей по своей таблице (A зависит от B, B от C и т.п., внедряя необходимые реализации автоматически, т.е. мы можем создавать сразу A)
    2. конфигурироваться без перекомпиляции (autowiring (автоматический поиск реализаций заданных интерфейсов) или по информации из конфиг-файла, вроде XML).
    Ответ написан
    6 комментариев
  • Как создать POST запрос без нажатия кнопки?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Вызвать вручную событие формы
    document.querySelector('form').submit();

    или же POST-запрос с помощью ajax (XMLHttpRequest)
    Ответ написан
    1 комментарий
  • Запуск Windows приложений в Linux через Wine?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    В случае управляемых приложений вам нужен не Wine, а Mono, который достаточно неплохо поддерживает .NET Framework 4.0.
    Ответ написан
  • Пишу таск-менеджер на ASP.NET. Как реализовать подсчёт времени выполнения задачи?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Не нужно хранить в базе ActualPerformanceTime, т.к.
    1. значение будет пересчитываться при каждом новом запросе
    2. оно должно допускать разрывы (паузы)

    Можно каждой таске сопоставить таблицу один-ко-многим с временными отрезками:
    class MyTimeSpan {
        public int Id { get; set;}
        public DateTime From { get; set; }
        public DateTime? To { get; set; }
    
        public int TaskId { get; set;}
        public Task Task { get; set;}
    }

    При старте MyTimeSpan.To остается null, при Stop или Pause - отрезок "закрывается". Если хоть один отрезок не закрыт, то таска находится в прогрессе (Task.TaskStatus не нужен. Тем более, что название свойства - тавтология).
    Ответ написан
    Комментировать
  • Как заменить блок html текста?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    то есть экранируются двойные кавычки...

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

    Вы уверены, что здесь правильно используется StringBuilder? Сейчас от него нет толка, ибо на каждой итерации цикла он возвращает и записывает строку, которая станет ненужной на следующей итерации, т.е. память все равно забивается, аллокации происходят. Какая-то преждевременная оптимизация.

    Убедитесь, что он заменяемое значение действительно там содержится. HtmlAgilityPack вполне может оптимизировать HTML (тот, который из OuterHtml), скажем, вырезать пробелы и/или переводы строки.
    Если вы работаете с DOM-парсером, то нужно не изобретать велосипеды, а пользоваться его API:
    string htmlTag = "<foo>bar</foo>";
    var newNode = HtmlNode.CreateNode( htmlTag );
    img.ParentNode.ReplaceChild(newNode, img);
    Ответ написан
    Комментировать
  • Вопрос по требованиям к реализации?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) Использовать файл конфигурации приложения для User-specific настроек

    Рядом со сборкой (MyApplication.exe или MyApplication.dll) можно положить XML-файл настроек (MyApplication.config), который будет влиять на конкретный экземпляр сборки. Можно почитать об этом у Рихтера (в главе про разветывание сборок) или в документации, там же есть XML-схема.
    Кроме того, такой Web.config файл есть у каждого ASP.NET-приложения (а у десктопного - App.config) на уровне проекта (не путать с Web.config в папке Views)

    2) Использовать ресурсы для хранения UI-строк

    Все видимые пользователю строковые ресурсы в приложениях принято оборачивать заменять на локализованный эквивалент. Это может быть сервис, в который подставит нужные значения, в зависимости от настроек приложения/языка пользователя и т.п. Грубо говоря, словарь терминов, который выбирает значения из таблицы по значению. Используется что-то вроде:
    <h3>@Localization.Get("Contacts_PageHeader")</h3>
    Извлекать значения, соответственно, из ресурсов.
    Ответ написан
    Комментировать
  • Как соединить выбранное значение DropDownList с @Url.Action?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    HTML-формы, либо с помощью js изменять параметры GET-запроса.
    Ответ написан
    Комментировать
  • Как добавить в ASP.NET CORE библиотеку на DOT.NET Framework 4.6.2?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Вы выбрали не тот тип проекта.

    Restore packages, как и project.json, существуют только для проектов под рантайм .NET Core. Предлагаю погрузиться в документацию.

    Вам также может быть полезна эта статья.
    Ответ написан
  • Что поучить по базам данных junior .NET Backend?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Есть язык ANSI SQL, он как идел, в чистом виде нигде не существует, каждая СУБД его придерживается, но вносит свои фишечки, которые делают его не полностью совместимым с другими СУБД. SQL с "фишечками" в конкретной СУБД назвается диалектом SQL. В MS SQL Server свой диалект - Transact-SQL. А еще в SQL Server можно встраивать .NET-сборки.

    EF из объектов и выражений генерирует T-SQL-код, отправляет SQL Server и парсит ответ снова в C#-объекты с учетом их связей, почему и называется ORM-фреймворком.

    Как правильно говорят, EF и прочие ORM не освобождают от необходимости знать SQL и того, как там организуются связи. Ибо на собеседосах все равно будут заставлять писать SQL на листочке, а на практике во имя бога производительности вы все равно будете писать хранимые процедуры на T-SQL. Так что работать с ADO.NET нужно уметь, даже не смотря на то, что это выглядит достаточно антично в наш хипстерский век.
    Ответ написан
    Комментировать
  • Особенности Mono и оговорки CLI-языков?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    особенности Mono...её отличия от "оригинальной" .Net

    www.mono-project.com/docs/about-mono/compatibility

    Троелсен упоминает о "серьёзных оговорках" при компиляции языков, удовлетворяющих требованиям спецификации CLI в CIL.

    Вероятно, речь идет о том, что не все языки поддерживают все возможности IL и чтобы библиотеки нормально можно было использовать в мультиязычной среде, нужно следовать некоторым ограничениям - CLS (Common Language Specification). Об этом лучше читать у Рихтера.
    Ответ написан
    1 комментарий
  • За что придется платить, если будешь использовать C# и .NET?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Можете почитать лицензионное соглашение MSVS Community 2017. Вкратце: мелким организациям и ИП - бесплатно.

    Важно отличать ASP.NET MVC и ASP.NET Core. Под первую пишут на виндах и под винду, второй - некоторой степени сырости (но жить можно), который можно использовать полностью бесплатно в любых масштабах.

    То есть для крупной организации это может быть от бесплатного .NET Core-решения на Linux (VS Code + ASP.NET Core + MS SQL Server Express), до полностью платного стека:
    1. MS Windows (на сервер, IIS в комплекте),
    2. MS SQL Server (на сервер),
    3. MS Windows для разработчика,
    4. MS Visual Studio для разработчика
    Ответ написан
    Комментировать
  • Как создать массив структур с n длинной?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Более того, у вас необъявленная переменная i =)

    Допустим, вы ошиблись, выпиливая лишний код, пусть эта переменная вычисляется у вас в рантайме (т.е. она не являтся константой). Внутри метода вы пытаетесь создать массив на стеке. Для этого компилятору важно знать заранее (в compile-time), какой буфер там резервировать, т.е. необходима константа или константное выражение, о чем и сказано в сообщении об ошибке.
    А как же C#?
    Но в С# же это было не обязательно, что же нам ответит на это Рихтер?

    Базовым для всех массивов является абстрактный класс System.Array, производный от System.Object. Значит, массивы всегда относятся к ссылочному типу и размещаются в управляемой куче, а переменная в приложении содержит не элементы массива, а ссылку на массив.


    В вашем же случае нужна конструкция вроде:

    array< PARAM_BYNAME_DATA^ >^ rgprmbd 
                       = gcnew array< PARAM_BYNAME_DATA^ >(i);
    Ответ написан
    Комментировать
  • C# как первый язык программирования. Как выстроить план изучения?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Я Студент.

    Студент какого учебного заведения?

    Шилдта в руки и вперед!

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

    А какой результат вам нужен? Хэлловорд сможете написать уже через час, а нормально что-то писать начать средний человек может через полгода-год.
    5-6 часов в день - это очень дофига для изучения. Я бы даже сказал, этого слишком много, ибо поглотить информации можно больше, чем "переварить", в голове образуется стылая плотная масса необработаной информации, которая с разных сторон торчит ключевыми словами. Оптимально - это 3-4 часа (2 на теорию + 1 на эксперименты с кодом) + здоровый сон в 7 часов.

    Во-первых, вы куда-то торопитесь? Не стоит, ничего гениального в ближайший год из-под пера не выйдет, это нормально. Сначала учитесь худо-бедно что-то примитивное писать, параллельно изучая API FCL, потом на этой базе делать маленькие тулы. Затем беретесь за серьезную литературу, вроде Рихтера и познаете суть CLR. Знания C/C++ здесь могли бы пригодиться, если вам их будут преподавать. Затем "Банду четырех" и учитесь примитивы собирать в кучу грамотно, используя паттерны разработки. Параллельно осваиваете кучу новых языков и технологий, экспериментируете (без этого есть риск быстро выгореть и забросить программирование). Полезно устроиться и где-то поработать некоторое время, попилить опенсорс. Ментор - это здорово, но не обязательно. Остерегайтесь платных курсов, любите книжки.

    И, главное, если действительно хотите научиться хорошо программировать, тогда не ограничивайте себя Unity (где C# - это язык скриптов, наравне с JavaScript), оттачивайте знания, копайте глубже фреймворков, интересуйтесь IT, учитесь решать реальные проблемы. Ведь это не самая плохая профессия, которая сможет сделать вам будущее.
    Ответ написан
    1 комментарий
  • Какое направление лучше выбрать при изучении c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) С# или Visual C#?

    Где вы прочитали это? В природе бывает лишь C# и он описывается стандартами. Visual %LANG_NAME% обычно Microsoft называет свои версии Visual Studio, заточенные под конкретную технологию. Но язык все равно С#.

    2) Что такое платформа .NET Framework?

    Это как бы...фреймворк) То есть вся та среда, в которой исполняется ваша программа, включая виртуальную машину (CLI) и библиотеку стандартных классов (FCL). То есть скомпилировав свое приложение, вам его нужно этой среде передать и она гарантирует наличие всего необходимого, чтобы приложение выполнилось. Пишет о нем отлично местный гуру - Джефри Рихтер в "CLR via C#". Странно было бы, если учебники, скажем, по JavaScript вплотную рассматривали бы V8, правда?)

    3) Недавно прочитал про .NET CORE.

    Это альтернативная реализация .NET Framework. Оно иначе работает и FCL там построена иначе. Но C# там точно такой же, как и на "большом" фреймворке, так что начав учить его вы ничего не потеряете. А уж MS позаботится, чтобы их сопутствующие технологии тоже не сильно отличались (ASP.NET MVC от ASP.NET Core, EntityFramework от EntityFramework Core.

    Вывод: если вы только начинаете, то вам без разницы, хоть под Core, хоть под .NET Framework, язык там один и тот же, консольные приложения такие же. Просто некоторые классы переехали в отдельные сборки. С нуля же лезть в фреймворки (ASP.NET MVC/Core, WPF, EntityFramework (без знания ADO.NET)) - рановато, освойтесь с самим языком, базовыми библиотеками.
    Ответ написан
    2 комментария
  • Как избежать тормозов при срабатывании try catch?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Перед обращением вызывайте IDataRecord.IsDBNull (int) вместо проверки try-catch.
    Ответ написан
    2 комментария
  • Стоит ли учить сегодня ASP.NET и можно ли на этом заработать?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Начнем с терминологии, а то хейтеры тут не особо разбираются =) Между ASP и ASP.NET MVC разница примерно такая же, как между Java и JavaScript.
    Java - это язык, как и C#. Под них есть свои веб-фреймворки, такие как JavaEE, Spring для Java или ASP.NET MVC, NancyFX для C#.


    Учить ASP (classic ASP) или ASP.NET (который Web Forms) с нуля уже не стоит. А вот ASP.NET MVC - отличный выбор. Это уже достаточно зрелый фреймворк, на котором работает много серьезных проектов (таких, как StackOverflow) и которая востребована на рынке как в России, так и в мире.

    Сам C# достаточно интересный, активно развивающийся язык. Платформа себя чувствует неплохо на любых популярных устройствах. Хорошо развивается .NET Core, являющийся переосмыслением монолитного .NET Framework, позволяющий разрабатывать компатные кросслатформенные приложения, в том числе и с использованием ASP.NET Core, которые можно развертывать самостоятельно, без огромного сервера за спиной, аналогично Node.js.

    Конечно, с ASP.NET MVC не пофрилансишь и сайты-визитки разрабатывать не так удобно =) Но поддерживать крупные приложения - одно удовольствие.

    А Java - это уже такой динозаврик, который стагнирует в роли вечного догоняющего, потихоньку будет сходить на нет в ближайшее десятилетие. Да, платформа обеспечила себя специалистами, тоннами легаси-проектов, которые необходимо поддерживать, поэтому с работой и под нее проблем не будет и менеджеры часто выбирают эту штуку, как проверенное десятилетиями средство. Но с точки зрения обычного программиста, я не вижу смысла выбирать Java.
    Ответ написан
    3 комментария
  • Как правильно хранить структуру c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Выглядит как сравнение "хардкод vs контейнер". Разница очевидна: Dictionary обеспечивает поиск со сложностью O(1) (против O(n) у свича) и способен динамически расширяться.
    В контексте задачи это похоже на DI для бедных. В этом случае Dictionary будет нагляднее.

    ИМХО по коду

    Не лишним было бы почитать стайлгайд для C#
    Ответ написан
    2 комментария