русский
Germany.ruForen → Архив Досок→ Programmierung

C# - У чего приоритет больше - у операторов или паттернов?

1042  1 2 3 4 alle
Murr патриот02.12.22 23:37
Murr
NEW 02.12.22 23:37 
in Antwort alex445 01.12.22 10:30

И затрат с ними много - пишешь днями то, что на EF делается за час.

-----

Снова - квалификация.

В большинстве случаев будет объемнее, но быстрее по реализации именно на dataSet'ах.

#41 
Срыв покровов gekickt bis 7/7/25 16:05 патриот02.12.22 23:47
02.12.22 23:47 
in Antwort alex445 01.12.22 10:30

Алекс, а ты вообще уже работал в каком-нить проекте на EF?
Прям в коммерческом, а не хелловорлд в НИИ.

#42 
alex445 коренной житель03.12.22 01:09
NEW 03.12.22 01:09 
in Antwort Срыв покровов 02.12.22 23:47, Zuletzt geändert 03.12.22 09:38 (alex445)

Далее будет вопрос - а если работал, то какую роль выполнял? А то ведь можно просочиться в какой-нибудь ФААНГ, и там годами быдлокодить. Это апелляции к личности, а не к теме разговора.


А по теме, вы с дата сетами дублируете данные. Вы сначала загружаете в них всё, а потом их опрашиваете, создавая объекты с теми же данными, что и в датасетах. И чтобы иметь возможность опрашивать не только частично, но и полные (по столбцам) таблицы, вы всегда держите в датасетах полные таблицы. Тогда как в EF вы получаете эти объекты сразу и только те столбцы, что запросили. Я вообще не понимаю, как с датасетами работали в начале 2000-х, когда памяти на машинах было куда меньше. Оно же жрало как не в себя и ворочалось как черепаха, особенно на том древнем железе.


Опросить таблицу в дата сете - это неочевидная грёбаная простыня из вложенных циклов, т.к. данные в тиблице хранятся в виде двухмерного массива, но без удобного доступа по двум индексам одновременно. Или пара отдельных запросов LINQ to objects.


Из-за своей древности дата сеты не поддерживают нормально налловые значения. При обращении к свойству вы не знаете, может ли оно быть налл. Надо проверить кучку методов Is<PropertyName>Null - нет ли в них названия свойства, к которому вы хотите обратиться. Поняли, да? Каждый раз, чтобы прочитать свойство, надо открыть класс с ним и внимательно его изучить. А теперь представьте себе таблицы с десятками столбцов - удачи в блуждании по сгенеренным дата сетами классам для этих таблиц.

#43 
alex445 коренной житель03.12.22 01:11
NEW 03.12.22 01:11 
in Antwort Murr 02.12.22 23:37, Zuletzt geändert 03.12.22 09:39 (alex445)
Снова - квалификация.
В большинстве случаев будет объемнее, но быстрее по реализации именно на dataSet'ах.

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

#44 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 10:16
NEW 03.12.22 10:16 
in Antwort alex445 03.12.22 01:09

чот ты какую-то херню несёшь

Что из базы данных выбрал, то и сохраняется в датасете

string queryString =
  "SELECT CustomerID, CompanyName FROM dbo.Customers";  
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);  
  
DataSet customers = new DataSet();  
adapter.Fill(customers, "Customers");  
#45 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 10:20
NEW 03.12.22 10:20 
in Antwort alex445 03.12.22 01:09
Опросить таблицу в дата сете - это неочевидная грёбаная простыня из вложенных циклов, т.к. данные в тиблице хранятся в виде двухмерного массива, но без удобного доступа по двум индексам одновременно.

до жего же ты ебанутый

Покажи мне как ты к коллекции из EF обратишься по двум индексам, чтобы взять второе свойство третьей строки?


#46 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 10:30
NEW 03.12.22 10:30 
in Antwort alex445 03.12.22 01:09

в наших старых проектах мы на null проверяли вот так. Что тебе мешает?

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}
#47 
Murr патриот03.12.22 11:25
Murr
NEW 03.12.22 11:25 
in Antwort alex445 03.12.22 01:11

Какая, в задницу, квалификация

------

Именно в упомянутом месте и лежит твоя квалификация.


выкопать котлован лопатой быстрее

------

Вот Я так и понимаю - незачем хвататься за лопату при наличии многократно проверенного в работе экскаватора.

И, кстати, от DataSet'а ты используешь от силы 2-3% доступной функциональности. Когда изучишь хотя бы до 50-60% - будет об чем поговорить. И это... LINQ на том же уровне нужен...

#48 
Murr патриот03.12.22 11:32
Murr
NEW 03.12.22 11:32 
in Antwort alex445 03.12.22 01:09

т.к. данные в тиблице хранятся в виде двухмерного массива

------

интерфейсная частьтам в виде RB-дерева... а представление в виде двухмерного массива это винда и стоит это почти половину наличной памяти.

Мат.часть учи...


представьте себе таблицы с десятками столбцов

-----

представил - строготипизированные таблицы.

и никаких проблем.

Единственное - мат.часть учить надо-ть...

#49 
Murr патриот03.12.22 11:39
Murr
NEW 03.12.22 11:39 
in Antwort Срыв покровов 03.12.22 10:30
object value = row["ColumnName"]; 
if (value == DBNull.Value)

А чего так сложно?

У меня вроде как всегда было


row.ColumnName.IsNull

А как и с чем оно сравнивается - закопано в типизированной таблице.

#50 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 11:42
NEW 03.12.22 11:42 
in Antwort Срыв покровов 03.12.22 10:30

через функцию Field<> вообще сразу получаешь nullable тип

using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
    foreach (DataRow drSource in dtSources.Rows)
    {
        int? iID = drSource.Field<int?>("ID");
    }
}
#51 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 11:44
NEW 03.12.22 11:44 
in Antwort alex445 03.12.22 01:11

ну и повторю вопрос: есть ли у тебя боевой опыт с EF или только пару хелловорлдов написал?

#52 
Murr патриот03.12.22 11:52
Murr
NEW 03.12.22 11:52 
in Antwort Срыв покровов 03.12.22 11:44

Он не знает где и сколько ему придется мудохаться с EF...

Я изначально тоже радовался... Оказалось - зря - дохрена чего просто невозможно сделать через EF. Но, да. на первом этапе все неплохо компактикуется... а потом начинаются проблемы, решать которые сложнее, чем в датасетах...

#53 
Murr патриот03.12.22 11:55
Murr
NEW 03.12.22 11:55 
in Antwort Срыв покровов 03.12.22 10:20

взять второе свойство третьей строки?

------

А мне, плс, поменять его значение и после 10 секунд простоя записать в обратно в базу в одном баче с остальными изменениями...

#54 
alex445 коренной житель03.12.22 15:44
NEW 03.12.22 15:44 
in Antwort Срыв покровов 03.12.22 10:20
Покажи мне как ты к коллекции из EF обратишься по двум индексам, чтобы взять второе свойство третьей строки?

А в EF и не надо по индексам:

Skip(2).Take(1).<второе свойство>


Теперь так же коротко в датасетах сделайте. Хоть с индексами, хоть без. Только у меня в EF эта строчка сразу и запрос выполняет, и я считываю нужное свойство. А в датасетах надо сначала выполнить запрос, а потом считать датасет.

#55 
alex445 коренной житель03.12.22 15:46
NEW 03.12.22 15:46 
in Antwort Срыв покровов 03.12.22 10:30

в наших старых проектах мы на null проверяли вот так. Что тебе мешает?

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}

Наверное, 4-5 строк кода на каждое свойство, вместо одной?

В принципе, ничего не мешает копать котлован лопатой вместо экскаватора.

#56 
alex445 коренной житель03.12.22 15:49
NEW 03.12.22 15:49 
in Antwort Murr 03.12.22 11:52

Он не знает где и сколько ему придется мудохаться с EF...

Я изначально тоже радовался... Оказалось - зря - дохрена чего просто невозможно сделать через EF. Но, да. на первом этапе все неплохо компактикуется... а потом начинаются проблемы, решать которые сложнее, чем в датасетах...

Проблемы в чём? В скорости и неоптимальных запросах? В узких местах пишете свой оптимальный запрос "вручную". Нет универсального инструмента, подходящего всегда. Но есть подходящие в подавляющем большинстве случаев.


Вы как те придурки, кто жалуется на производительность C# после работы с низкоуровневыми оптимизациями - вот мол вас Сишарп тормозной. Ну так в узких местах вставляй свои оптимизации, а в остальных - пользуйся удобным Шарпом.

#57 
alex445 коренной житель03.12.22 15:50
NEW 03.12.22 15:50 
in Antwort Murr 03.12.22 11:55
взять второе свойство третьей строки?

------

А мне, плс, поменять его значение и после 10 секунд простоя записать в обратно в базу в одном баче с остальными изменениями...


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

#58 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 20:18
NEW 03.12.22 20:18 
in Antwort alex445 03.12.22 15:44
А в EF и не надо по индексам:

тут надо, тут не надо.

Алёша крутит жопой.

#59 
Срыв покровов gekickt bis 7/7/25 16:05 патриот03.12.22 20:21
NEW 03.12.22 20:21 
in Antwort alex445 03.12.22 15:46
Наверное, 4-5 строк кода на каждое свойство, вместо одной?

где там у тебя на EF одна строчка, болезный?

#60 
1 2 3 4 alle