powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение по заполнению
25 сообщений из 25, страница 1 из 1
Подскажите оптимальное решение по заполнению
    #38304534
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например есть класс

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Test
   {
       public Int64 Id { get; set; }
       public string Title { get; set; }
       public List<string> SL { get; set; }
       //...
   }



Код: c#
1.
2.
3.
public class TestCollection : List<Test>
   {
   }



теперь в классе где находятся функции заполнения данными я делаю так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public TestCollection GetData()
    {
        TestCollection  tc = new TestCollection ();
        
         using (SqlConnection sqlConn = new SqlConnection("строка подключения"))
        {
            SqlDataReader _dr;
            SqlCommand cmd = new SqlCommand("Хранимая процедура", sqlConn);;
            cmd.CommandType = CommandType.StoredProcedure;
            try
            {
                sqlConn.Open();
                _dr = cmd.ExecuteReader();
                while (_dr.Read())
                {
                    Test t = new Test();
                    t.Id = _dr.GetInt64(0);
                    if (!_dr.IsDBNull(1)) { t.Title = _dr.GetString(1); }
                    //...В классе Test есть лист SL его тоже надо как то заполнить.
                    tc.Add(t);
                }
                _dr.Close();

                //** продолжение кода ниже
            }
            catch { return null; }
            finally { sqlConn.Close(); }
        }
        return tc;
    }



Так вот сам вопрос как заполнить поле SL? я всегда давал на базу отдельный запрос и заполнял его. Но что делать если reader вернет 100 и более записей TestCollection то как поступить что бы не делать так

**
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
foreach(Test t in tc)
{
List<string> sl = new List<string>();
   //здесь идет заполение поля SL
    using (SqlConnection sqlConn = new SqlConnection("строка подключения"))
    {
        //...
        sl.Add(t.List = _dr.GetString(0););
    }
}



Спасибо.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304554
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Открой для себя Entity Framework, не мучайся. Он сам сгенерит тебе классы и всё заполнит как надо.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304569
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2,

Спасибо, я знаю о EF

но я хотел бы узнать как правильно так заполнять данные
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304573
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты можешь это сделать одним запросом в бд? да тогда вперед заполняй. но зависимые ресурсы как правило 1:n не получиться все в 1 запрос.
варианты:
1) ленивое поле для свойства SL
2) так как у тебя там список строк то в на скул можно склеить в 1 поле результат, а потом в коде расплитить на коллекцию


п.с. сколько сижу на форуме и не могу понять почему люди ковыряться в чистом адо, ну врапер хотя бы.
п.с. зачем блок finally если есть using? да и в отлове ошибки смысла нет ...вы её не обрабатываете, а просто проглатываете и выдаете null
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304582
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIT2708Спасибо, я знаю о EF
но я хотел бы узнать как правильно так заполнять данные
EF создан в первую очередь для таких, как ты - чтобы избавить код от зла. В топку велосипед, серьезно. Если у тебя трудности с банальным намапливанием данных, то EF будет лучшим помощником в данной ситуации :)
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304592
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воо еще можешь поглядеть сорсы https://github.com/SamSaffron/dapper-dot-net#multi-mapping
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304604
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuты можешь это сделать одним запросом в бд? да тогда вперед заполняй. но зависимые ресурсы как правило 1:n не получиться все в 1 запрос.
варианты:
1) ленивое поле для свойства SL
2) так как у тебя там список строк то в на скул можно склеить в 1 поле результат, а потом в коде расплитить на коллекцию


п.с. сколько сижу на форуме и не могу понять почему люди ковыряться в чистом адо, ну врапер хотя бы.
п.с. зачем блок finally если есть using? да и в отлове ошибки смысла нет ...вы её не обрабатываете, а просто проглатываете и выдаете null

Почему не использую "врапер" потому что код проекта писался вручную и сейчас нужно все переписать из-за использования например EF а это проблематично так как EF в некоторых местах не подходит так как есть критические места по производительности
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304606
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2VIT2708Спасибо, я знаю о EF
но я хотел бы узнать как правильно так заполнять данные
EF создан в первую очередь для таких, как ты - чтобы избавить код от зла. В топку велосипед, серьезно. Если у тебя трудности с банальным намапливанием данных, то EF будет лучшим помощником в данной ситуации :)

EF не совсем подходит
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304608
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

Спасибо сейчас посмотрю
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304613
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIT2708Почему не использую "врапер" потому что код проекта писался вручную и сейчас нужно все переписать из-за использования например EF а это проблематично так как EF в некоторых местах не подходит так как есть критические места по производительности
Так милый мой, кто мешает использовать твою хранимую процедуру в EF? EF отлично с ними работает.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304628
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2,

Так проект нужно переписывать потому что потом запутаться можна, в будущем он все равно будет переписыватся но не сейчас, да мне самому стало интересно как нормально можна заполнять списки в классах
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304630
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

эм ты вообще понимаешь что такое врапер пардон? после твоих объяснений похоже что нет. Скрыть создание конекшена и команды, их высвобождение, чтоб не париться с этой рутинной работой за оболочкой так трудно? да и код будет приятнее.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38304677
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VIT2708Так проект нужно переписывать потому что потом запутаться можна
Ну так ты его и так переписываешь на свои костыли. Чем тогда EF не устроил?

VIT2708да мне самому стало интересно как нормально можна заполнять списки в классах
Удивительно. Ведь еще на первому курсе студенты проходят тему " Нормальное заполнение списка данными".
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305063
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708
Так вот сам вопрос как заполнить поле SL? я всегда давал на базу отдельный запрос и заполнял его. Но что делать если reader вернет 100 и более записей TestCollection то как поступить что бы не делать так

Если там список строк, то можно вернуть в одном запросе строку с разделителями.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305451
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВVIT2708Так вот сам вопрос как заполнить поле SL? я всегда давал на базу отдельный запрос и заполнял его. Но что делать если reader вернет 100 и более записей TestCollection то как поступить что бы не делать так

Если там список строк, то можно вернуть в одном запросе строку с разделителями.
А если разделитель попадется в строке? Вариант приемлем для идентификаторов, интов, гуидов. Для всего остального xml.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305464
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2,
Есть символы, попадание которых маловероятно, например один из этих.
санскритलोके सर्वेषां जनानां स्नेहिता: भवन्ति एव । तेषु स्नेहितेषु सज्जनानां संख्या तु न्यूना एव । यत: स्वार्थपरा: एव अधिका: सन्ति लोके । तथापि अस्माभि: सज्जनानां सहवास: एव करणीय: इति वदन् सुभाषितकार: तत्र कारणमपि वदति - सज्जनानां सहवासेन पुरुषाणां मनसि स्थिता: दुष्टा: विचारा: दूरं गच्छन्ति । मन: शुद्धं भवति । पुरा कृतं पापमपि भस्म भवति । अपि च प्राणिनां विषये दया अधिका भवति । अत: सज्जनानां स्नेह: मनुष्याणां किं वा न करोति ? अर्थात् सर्वविधानि मङ्गलानि अपि जनयति
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305467
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2,
Да, и никто кроме лени и невежества не помешает вернуть один столбец типа xml.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305476
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВcooldeveloper2,
Есть символы, попадание которых маловероятно, например один из этих.
санскритलोके सर्वेषां जनानां स्नेहिता: भवन्ति एव । तेषु स्नेहितेषु सज्जनानां संख्या तु न्यूना एव । यत: स्वार्थपरा: एव अधिका: सन्ति लोके । तथापि अस्माभि: सज्जनानां सहवास: एव करणीय: इति वदन् सुभाषितकार: तत्र कारणमपि वदति - सज्जनानां सहवासेन पुरुषाणां मनसि स्थिता: दुष्टा: विचारा: दूरं गच्छन्ति । मन: शुद्धं भवति । पुरा कृतं पापमपि भस्म भवति । अपि च प्राणिनां विषये दया अधिका भवति । अत: सज्जनानां स्नेह: मनुष्याणां किं वा न करोति ? अर्थात् सर्वविधानि मङ्गलानि अपि जनयति

Мало, но вероятно. Писать ненадежное решение не есть гуд.
Во-вторых, серьезно предлагаешь использовать в решении такие разделители или ты шутишь?
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305495
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2Мало, но вероятно. Писать ненадежное решение не есть гуд.
Да, а как поступают, если в sql server нужно найти % в like?
cooldeveloper2Во-вторых, серьезно предлагаешь использовать в решении такие разделители или ты шутишь?
Ну если тебе не нравиться санскрит, можно попробовать выбрать хотя бы из этого списка....
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305789
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВcooldeveloper2Мало, но вероятно. Писать ненадежное решение не есть гуд.
Да, а как поступают, если в sql server нужно найти % в like?
А причем тут like и формирование строки через разделитель для "вложенный выборки" для клиента?

ЕвгенийВНу если тебе не нравиться санскрит, можно попробовать выбрать хотя бы из этого списка....
Ты серьезно предлагаешь вариант подтягивания рекодсета строк через разделитель как надежный и правильный вариант?
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305815
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДа, и никто кроме лени и невежества не помешает вернуть один столбец типа xml.
только этого не хватало для полного счастья
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305873
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708... Так вот сам вопрос как заполнить поле SL? я всегда давал на базу отдельный запрос и заполнял его. Но что делать если reader вернет 100 и более записей TestCollection то как поступить что бы не делать так
Я в основном делаю аналогично - если записей для SL мало или очень много - то такой подход не уменьшает производительность и нагрузку на SQL Server... Достоинство такого варинта - удобочитаемость, простота и понятность при последующем сопровождении...

Если есть желание, то можно просто взять все данные на клиента в виде двух списков и потом используя LINQ заполнить Ваш класс.

На мой взгляд Ваш обычный вариант очень хорош...

P.S. Если любители EF 5.0 посмотрят код как они там это делают, то будут неприятно удивлены как там неуклюже написаны некоторые вещи. Хотя я и встречал народ который создал EF на одной из конференций но "объять необъятное" еще никому не удавалось и их же совет был - если Вам надо что-то быстрое и нетиповое - не стесняйтесь, пишите все сами
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38305883
cooldeveloper2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChЕсли есть желание, то можно просто взять все данные на клиента в виде двух списков и потом используя LINQ заполнить Ваш класс.
На мой взгляд Ваш обычный вариант очень хорош...
Зачем такие ужасы советовать начинающему? Автор, никогда так не делай.

Sergey ChЕсли любители EF 5.0 посмотрят код как они там это делают, то будут неприятно удивлены как там неуклюже написаны некоторые вещи.
Например?
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38307234
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper2 Зачем такие ужасы советовать начинающему? Автор, никогда так не делай.
Вы все прекрасно поняли - не передергивайте.

На клиента берется строго то, что нужно но двумя chunks - в первой будут ID & Title, во второй ID(s) & SL...
...
Рейтинг: 0 / 0
Подскажите оптимальное решение по заполнению
    #38307248
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Ch,
заговорили о ef
Зачем два списка? хранилище не поддерживает джойны?
одного рекорда хватает для заполнения...
прозвучало выше исполнить ленивую загрузку, вполне уместно
пишем:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  private List<string> _sl;
       public  IEnumerable<string> SL
       {
           get
           { if (_sl == null)
             {
              _sl= GetList(Id);
             }
               return _sl;
           }
        
       }


Лениво? - Лениво..
авторЕсли любители EF 5.0 посмотрят код как они там это делают, то будут неприятно удивлены как там неуклюже написаны некоторые вещи.
Все же интересно, что вы имели ввиду?
То что они используют хак поверх Ado, так это хозяин барин, в плане скорости есть думаю резервы ибо их реализация
затрагивает обширные возвращаемые типы, но это казуистика в плане скорости передачи по сети, и в помыленном плане ослабляет
надежность приложения, то что тут написано вообще даже отдаленно не напоминает промышленный мап, просто разминка
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение по заполнению
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]