Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение по заполнению / 25 сообщений из 25, страница 1 из 1
20.06.2013, 12:24
    #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
20.06.2013, 12:30
    #38304554
cooldeveloper2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение по заполнению
Открой для себя Entity Framework, не мучайся. Он сам сгенерит тебе классы и всё заполнит как надо.
...
Рейтинг: 0 / 0
20.06.2013, 12:35
    #38304569
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение по заполнению
cooldeveloper2,

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На клиента берется строго то, что нужно но двумя chunks - в первой будут ID & Title, во второй ID(s) & SL...
...
Рейтинг: 0 / 0
23.06.2013, 01:59
    #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
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение по заполнению / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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