Задать вопрос
  • Связь многие ко многим в MS SQL для чего?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Простейший пример - сотрудники и группы. Сотрудник может входить в несколько групп, в группу может входить несколько сотрудников.
    Ответ написан
    Комментировать
  • Связь многие ко многим в MS SQL для чего?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Пример из реальной жизни: Есть таблица товаров интернет-магазина и есть таблица акций, действующих на товары. Любой товар может участвовать в множестве акций и любая акция может включать множество товаров. И нет никакого способа хранить информацию об этих связях, кроме использования дополнительной таблицы.
    Ответ написан
    Комментировать
  • Разница между get и return(Глупый вопрос)?

    @JihadTV
    То ли я от шарпа отстал, то ли второе вообще непонятно что.
    Первое -свойство , имеющее только геттер.
    Ответ написан
    Комментировать
  • C# в качестве backend под linux, стоит ли?

    @FoxInSox
    Стоит ли сейчас C# использовать на сервере?

    Конечно.
    Ответ написан
    Комментировать
  • Чем отличается Visual C# от C#?

    manul
    @manul
    Язык один - C#
    Visual C# - это компонент в среде Visual Studio, отвечающий за его поддержку.
    Ответ написан
    Комментировать
  • Где почитать информация по провайдерам данных?

    ODP.NET это надстройка над ADO.NET?

    Ну у вас и каша в голове, неудивительно, что вы ничего не можете найти.

    ADO.NET - это прежде всего набор интерфейсов, обеспечивающих написание кода, работающего с реляционными данными таким образом, что он минимально зависит (или не зависит вообще) от конкретной используемой СУБД. ADO.NET это далеко не первая попытка унифицировать интерфейс доступа к базам данных (хотя бы к реляционным), многие крупные вендоры это делали, тот же Борланд.

    С момента появления дотнета как платформы ADO.NET был и остаётся основным способом доступа к реляционным БД из дотнет-приложений. В большинстве случаев нет причин НЕ пользоваться им. Стоит отметить, что хоть сейчас MS советует использовать ORM (с тех пор, как повзрослел Entity Framework) для доступа к данным, ADO.NET никуда не девался, т.к. все известные мне ORM-ми работают также через эти интерфейсы.

    Провайдеров данных существует множество, и существование каждого из провайдеров определяется существованием конкретной СУБД. ODP.NET это не надстройка над ADO.NET, это реализация интерфейсов ADO.NET, способная взаимодействовать с Ораклом. Аналогичные провайдеры существуют и для других популярных СУБД, включая PostgreSQL, DB2, MySQL и даже SQLite. По сути доступность реляционной СУБД на дотнете определяется наличием работоспособного ADO.NET-провайдера.

    Разумеется, конкретный провайдер может добавлять какой-то специфичный функционал, но при этом он должен реализовать все необходимые интерфейсы. Фишка ADO.NET в том, что реально написать такое приложение (разумеется, если пользоваться только стандартными SQL конструкциями), которое ВООБЩЕ не будет зависеть от конкретной СУБД вплоть до того, что нужного провайдера можно будет указывать в конфиг-файле.

    Большинство интерфейсов и классов ADO.NET находятся в пространстве имён System.Data. Условно они делятся на собственно интерфейсы для доступа к БД (важнейшие из них: IDbConnection, IDbCommand, IDataReader) и классы-хелперы, в частности набор классов для организации простейшей in-memory базы данных внутри вашего приложения, которая будет служить кэшем для данных, взятых из основной БД (важнейшие классы: DataSet, DataTable).

    Слышал что есть управляемые и неуправляемые провайдеры данных, в чем отличие?

    Я думаю, что речь идёт об использовании или неиспользовании неуправляемого кода в реализации провайдера данных.

    Почитать об этом можно в любой нормальной книжке по дотнету. Если остались вопросы, пишите в комментарии.
    Ответ написан
    3 комментария
  • Нужно ли вкладываться в IDE для C#?

    kykyryky
    @kykyryky
    >>для комфортной работы
    Хочется отметить, что для комфортной работы студии + решарпера нужен так же довольно мощный комп. Лично меня тормознутость этой парочки перестала раздражать только на i7/16 Гб ram/ssd.
    Ответ написан
    Комментировать
  • Непонятные синие точки в Visual Studio 2013, от куда?

    @Melz
    Это пробелы. Уберите галочку в (если отдельно плагин не стоит)

    Edit -> Advanced -> View White Space
    Ответ написан
    Комментировать
  • Как из списка базового класса сделать список наследуемового класса?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    *Какая-то беда с дизайном.*

    Кастовать вниз по иерархии (downcast) напрямую объекты A в B нельзя, потому что A - это не B. Потому что B содержит какое-то дополнительное состояние (b), которого нет в A и компилятору неизвестно, каким оно должно быть в текущем виде (A конструировался иначе, чем B и как получить валидный B из A - известно лишь программисту).
    Об этом вам пытается рассказать рантайм (Invalid Cast).

    Что касается методов, которые не приводят к желаемому:
    Enumerable.OfType<T>() - фильтрует по типу и законно возвращает пустой список (у вас список A, там действительно нет B)
    Enumerable.Cast<T>() - последовательно делает каст, который невозможен.

    Можно попытаться скопировать объекты в новый список:
    listA.Select(x => new B{ a = x.a }).ToList();

    Но это прокатит лишь в том случае, если мы сможем достать из A необходимые данные для конструирования объекта B. Важно понимать, что это будут именно ДРУГИЕ объекты. Если A некопируем по своей природе, то этот фокус не пройдет.
    Ответ написан
    1 комментарий
  • Async-await и Task.wait() В чем разница?

    @carbon88
    .NET developer/ORM developer
    Task.Wait() будет блокировать вызывающий поток, а await не будет этого делать.
    Так называемый continuation (то что ниже await) будет выполнен после завершения таска, что ожидается через await. При этом вызывающий поток блокироваться не будет и сможет выполнить еще какую-то работу, например, среагировать на нажатие кнопки если это основной поток GUI приложения или если это асп.нет приложение он сможет начать обрабатывать следующий запрос.
    Как только таск выполнится начнется исполнение continuation и в некоторых случаях не гарантируется что это будет тот же поток в котором выполнялся код до await.
    Ответ написан
    Комментировать
  • Цикл foreach при работе с коллекциями и массивами?

    @interlocked
    .NET developer
    Enumerator обычно реализовывается в закрытом вложенном классе, в методах которого вы просто используете экземпляр вашей коллекции. Для написания полноценной коллекции на основе массива можно воспользоваться обобщенными интерфейсами ICollection<T> / IList<T>. Для словарей - IDictionary<TKey, TValue> и т. д. Не соглашусь с предыдущим решением "не создавайте собственные коллекции вообще" - коллекции нужно создавать, стандартные не всегда подходят для реализации некоторых моделей. Например, для WPF есть ObservableCollection<T>, а что если нужен отслеживаемый словарь?
    Ответ написан
    2 комментария
  • Можно ли получить права пользователя Администратор на Windows 7 из кода?

    @serber
    Можно в манифесте приложения указать необходимость прав администратора. В этом случае при запуске будет появляться окно UAC. Пример
    Ответ написан
    1 комментарий
  • Async и Await C# в потоке (Thread) без событий. Нужно ли?

    @Hydro
    C#/.NET Developer
    Async / Await - это сахар для оптимального использования пула потоков, можно обойтись без него, а если нужно использовать все треды на полную катушку, то следует использовать Async / Await.
    Навскидку скажу только такие ситуации, где он необходим:
    1) Чтобы избавиться от синхронных вызовов долгих вычислений в потоках, критичных к скорости выполнения. Как раз частный случай - пример, который описал Haze Max. Но нельзя забывать, что в WPF и WinForms, чтобы после этих вычислений что-то делать с окошком, нужно отмаршалиться обратно в UI поток.
    2) Интенсивный IO - чтобы не останавливать поток, который ждет данные (либо пишет данные) от внешнего ресурса (hdd, сетевая карта например), исполнение кода следует переключать в асинхронный режим, чтобы избавиться от заморозки потока на время ожидания (пока происходит ожидание ответа, тред может выполнить какой-то еще код).
    Ответ написан
    Комментировать
  • Зачем нужна Обратная Польская Запись?

    Что бы избавиться от скобок. Выражение в ОПЗ можно вычислять слева на право, читая посимвольно. При группировке скобками такое невозможно.

    UPD:
    FPU, например, как раз программируется с помощью ОПЗ. Т.е. преобразовав выражение в ОПЗ можно очень легко записать его на ассемблере.
    Ответ написан
    Комментировать
  • Как перенести Sqlite базу данных на удаленный сервер и подключиться к ней?

    Rou1997
    @Rou1997
    MySQL надо использовать, если SQLite то сервер (REST API и т.п.) сами писать будете, в нее не входит сервер.
    Ответ написан
    1 комментарий
  • Как написать расширение метода для EF6?

    andrewpianykh
    @andrewpianykh
    Реализуйте для модели интерфейс IEntity, чтобы в методе расширения использовать ограничение универсального типа:

    public interface IEntity
    {
    	int Id { get; set; }
    }
    
    public class Model : IEntity
    {
    	public int Id { get; set; }        
    	// ...
    }


    public static bool ExistById<T>(this DbSet<T> source, int id) where T : IEntity
    {
    	return source.Count(c => c.Id == id) > 0;
    }
    Ответ написан
    3 комментария
  • Как вернуть из функции ответ return разного типа?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Если генерируете некий List, то при не критической ошибке (файл пуст), стоит возвращать пустой List. Если ошибка критическая (файл не найден, невозможно открыть файл на чтение, невалидный аргумент, нулевой аргумент), то нужно бросать исключение.

    private static List<SomeType> ReadFromFile(string path) {
        if (path == null) {
            throw new ArgumentNullException("path");
        }
        if (File.Exists(path)) {
            string file = File.ReadAllText(path);
            ...
        } else {
            throw new FileNotFoundException(path);
        }
    }


    Тогда в вызывающем коде можно делать проверки:

    private void  doTheBestBtn_Click(object sender, EventArgs e)
    {
        try {
            var myList = ReadFromFile(txtInput.Text);
            ...
        }
        catch(ArgumentNullException ex) {
            MessageBox.Show("Необходимо указать путь к файлу!");
        }
        catch(FileNotFoundException ex) {
            MessageBox.Show("Указанный файл не найден!");
        }
    }


    PS File.ReadAllText сам бросает некоторые исключения, но допустим, что это самопальный тип.
    Ответ написан
    Комментировать