Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 5
Регистрация: 09.10.2015
Сообщений: 229

Entity Framework проблемы с памятью

11.02.2021, 09:28. Показов 3923. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, Я тут решил разобраться с такой вещью как Entity Framework взял базу sqlite в таблице 1м строк и 263 столбца преимущественно float значения.

Создал контекст
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public class DbTestDataBase : DbContext
    {
 
        public DbTestDataBase():base("ConnectionString")
        {
            
        }
       
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
 
        public DbSet<RealTimeDataTable> RealTimeDataTable { get; set; }
 
    }
И сделал следующую манипуляцию
C#
1
2
3
4
5
6
7
8
9
10
11
12
 using (var db = new DbTestDataBase())
                {
                    var lis = db.RealTimeDataTable.Where(e => e.Value52 > 1600867200 && e.Value52 < 1600953600).ToArray();
 
                    foreach (var rr in lis)
                    {
                        var v = rr.Value52;
                        Console.SetCursorPosition(0,0);
                        Console.WriteLine(v);
 
                    }
                }
И в этом примере я запрашиваю 86000 строк это не так много, и я это понимаю но при данном запросе память занимаемая программой уходит за 1.5 гб. Хотя если я сделаю тоже самое с помощью SQLiteDataReader помещу все значения в туже модель таблицы не будет больше 100 мб и то это много можно сократить 20 мб. Вопрос что то я делаю не так или Entity Framework не про это?

Добавлено через 33 секунды
Модель таблицы
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
 [Table("RealTimeDataTable")]
    public class RealTimeDataTable
    {
        
        public int Number { get; set; }
 
         
        public string ShrtFile_Name { get; set; } = string.Empty;
 
        
        public bool Sync { get; set; }
 
        
        public bool Send { get; set; }
        
        public float Value0 { get; set; } = 0;
        
        public float Value1 { get; set; } = 0;
        
        public float Value2 { get; set; } = 0;
        
        public float Value3 { get; set; } = 0;
        
        public float Value4 { get; set; } = 0;
        
        public float Value5 { get; set; } = 0;
        
        public float Value6 { get; set; } = 0;
        
        public float Value7 { get; set; } = 0;
        
        public float Value8 { get; set; } = 0;
        
        public float Value9 { get; set; } = 0;
        
        public float Value10 { get; set; } = 0;
        
        public float Value11 { get; set; } = 0;
        
        public float Value12 { get; set; } = 0;
        
        public float Value13 { get; set; } = 0;
        
        public float Value14 { get; set; } = 0;
        
        public float Value15 { get; set; } = 0;
        
        public float Value16 { get; set; } = 0;
        
        public float Value17 { get; set; } = 0;
        
        public float Value18 { get; set; } = 0;
        
        public float Value19 { get; set; } = 0;
        
        public float Value20 { get; set; } = 0;
        
        public float Value21 { get; set; } = 0;
        
        public float Value22 { get; set; } = 0;
        
        public float Value23 { get; set; } = 0;
        
        public float Value24 { get; set; } = 0;
        
        public float Value25 { get; set; } = 0;
        
        public float Value26 { get; set; } = 0;
        
        public float Value27 { get; set; } = 0;
        
        public float Value28 { get; set; } = 0;
        
        public float Value29 { get; set; } = 0;
        
        public float Value30 { get; set; } = 0;
        
        public float Value31 { get; set; } = 0;
        
        public float Value32 { get; set; } = 0;
        
        public float Value33 { get; set; } = 0;
        
        public float Value34 { get; set; } = 0;
        
        public int Value35 { get; set; } = 0;
        
        public int Value36 { get; set; } = 0;
        
        public float Value37 { get; set; } = 0;
        
        public float Value38 { get; set; } = 0;
        
        public float Value39 { get; set; } = 0;
        
        public float Value40 { get; set; } = 0;
        
        public float Value41 { get; set; } = 0;
        
        public float Value42 { get; set; } = 0;
        
        public float Value43 { get; set; } = 0;
        
        public float Value44 { get; set; } = 0;
        
        public float Value45 { get; set; } = 0;
        
        public float Value46 { get; set; } = 0;
        
        public float Value47 { get; set; } = 0;
        
        public float Value48 { get; set; } = 0;
        
        public float Value49 { get; set; } = 0;
        
        public float Value50 { get; set; } = 0;
        
        public float Value51 { get; set; } = 0;
        
        [Key, Required, DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Value52 { get; set; }
        
        public float Value53 { get; set; } = 0;
        
        public float Value54 { get; set; } = 0;
        
        public float Value55 { get; set; } = 0;
        
        public float Value56 { get; set; } = 0;
        
        public float Value57 { get; set; } = 0;
        
        public float Value58 { get; set; } = 0;
 
        public float Value59 { get; set; } = 0;
 
        public float Value60 { get; set; } = 0;
 
        public float Value61 { get; set; } = 0;
 
        public float Value62 { get; set; } = 0;
 
        public float Value63 { get; set; } = 0;
 
        public float Value64 { get; set; } = 0;
 
        public float Value65 { get; set; } = 0;
 
        public float Value66 { get; set; } = 0;
 
        public float Value67 { get; set; } = 0;
 
        public float Value68 { get; set; } = 0;
 
        public float Value69 { get; set; } = 0;
 
        public float Value70 { get; set; } = 0;
 
        public float Value71 { get; set; } = 0;
 
        public float Value72 { get; set; } = 0;
 
        public short Value73 { get; set; } = 0;
 
        public float Value74 { get; set; } = 0;
 
        public int Value75 { get; set; } = 0;
 
        public float Value76 { get; set; } = 0;
 
        public float Value77 { get; set; } = 0;
 
        public short Value78 { get; set; } = 0;
 
        public float Value79 { get; set; } = 0;
 
        public float Value80 { get; set; } = 0;
 
        public float Value81 { get; set; } = 0;
 
        public float Value82 { get; set; } = 0;
 
        public float Value83 { get; set; } = 0;
 
        public float Value84 { get; set; } = 0;
 
        public float Value85 { get; set; } = 0;
 
        public object Value86 { get; set; } = null;
 
        public float Value87 { get; set; } = 0;
 
        public float Value88 { get; set; } = 0;
 
        public float Value89 { get; set; } = 0;
 
        public float Value90 { get; set; } = 0;
 
        public float Value91 { get; set; } = 0;
 
        public float Value92 { get; set; } = 0;
 
        public float Value93 { get; set; } = 0;
 
        public float Value94 { get; set; } = 0;
 
        public float Value95 { get; set; } = 0;
 
        public float Value96 { get; set; } = 0;
 
        public float Value97 { get; set; } = 0;
 
        public float Value98 { get; set; } = 0;
 
        public float Value99 { get; set; } = 0;
 
        public float Value100 { get; set; } = 0;
 
        public float Value101 { get; set; } = 0;
 
        public float Value102 { get; set; } = 0;
 
        public short Value103 { get; set; } = 0;
 
        public float Value104 { get; set; } = 0;
 
        public float Value105 { get; set; } = 0;
 
        public float Value106 { get; set; } = 0;
 
        public short Value107 { get; set; } = 0;
 
        public short Value108 { get; set; } = 0;
 
        public short Value109 { get; set; } = 0;
 
        public short Value110 { get; set; } = 0;
 
        public short Value111 { get; set; } = 0;
 
        public short Value112 { get; set; } = 0;
 
        public short Value113 { get; set; } = 0;
 
        public float Value114 { get; set; } = 0;
 
        public float Value115 { get; set; } = 0;
 
        public float Value116 { get; set; } = 0;
 
        public float Value117 { get; set; } = 0;
 
        public float Value118 { get; set; } = 0;
 
        public float Value119 { get; set; } = 0;
 
        public float Value120 { get; set; } = 0;
 
        public float Value121 { get; set; } = 0;
 
        public float Value122 { get; set; } = 0;
 
        public float Value123 { get; set; } = 0;
 
        public float Value124 { get; set; } = 0;
 
        public object Value125 { get; set; } = null;
 
        public object Value126 { get; set; } = null;
 
        public float Value127 { get; set; } = 0;
 
        public float Value128 { get; set; } = 0;
 
        public float Value129 { get; set; } = 0;
 
        public float Value130 { get; set; } = 0;
 
        public short Value131 { get; set; } = 0;
 
        public short Value132 { get; set; } = 0;
 
        public float Value133 { get; set; } = 0;
 
        public float Value134 { get; set; } = 0;
 
        public float Value135 { get; set; } = 0;
 
        public float Value136 { get; set; } = 0;
 
        public float Value137 { get; set; } = 0;
 
        public float Value138 { get; set; } = 0;
 
        public float Value139 { get; set; } = 0;
 
        public float Value140 { get; set; } = 0;
 
        public float Value141 { get; set; } = 0;
 
        public float Value142 { get; set; } = 0;
 
        public float Value143 { get; set; } = 0;
 
        public float Value144 { get; set; } = 0;
 
        public float Value145 { get; set; } = 0;
 
        public float Value146 { get; set; } = 0;
 
        public float Value147 { get; set; } = 0;
 
        public object Value148 { get; set; } = null;
 
        public float Value149 { get; set; } = 0;
 
        public short Value150 { get; set; } = 0;
 
        public float Value151 { get; set; } = 0;
 
        public float Value152 { get; set; } = 0;
 
        public float Value153 { get; set; } = 0;
 
        public float Value154 { get; set; } = 0;
 
        public float Value155 { get; set; } = 0;
 
        public float Value156 { get; set; } = 0;
 
        public float Value157 { get; set; } = 0;
 
        public float Value158 { get; set; } = 0;
 
        public float Value159 { get; set; } = 0;
 
        public float Value160 { get; set; } = 0;
 
        public float Value161 { get; set; } = 0;
 
        public float Value162 { get; set; } = 0;
 
        public float Value163 { get; set; } = 0;
 
        public float Value164 { get; set; } = 0;
 
        public float Value165 { get; set; } = 0;
 
        public float Value166 { get; set; } = 0;
 
        public float Value167 { get; set; } = 0;
 
        public float Value168 { get; set; } = 0;
 
        public float Value169 { get; set; } = 0;
 
        public float Value170 { get; set; } = 0;
 
        public float Value171 { get; set; } = 0;
 
        public float Value172 { get; set; } = 0;
 
        public float Value173 { get; set; } = 0;
 
        public float Value174 { get; set; } = 0;
 
        public float Value175 { get; set; } = 0;
 
        public float Value176 { get; set; } = 0;
 
        public float Value177 { get; set; } = 0;
 
        public float Value178 { get; set; } = 0;
 
        public float Value179 { get; set; } = 0;
 
        public float Value180 { get; set; } = 0;
 
        public float Value181 { get; set; } = 0;
 
        public float Value182 { get; set; } = 0;
 
        public float Value183 { get; set; } = 0;
 
        public float Value184 { get; set; } = 0;
 
        public float Value185 { get; set; } = 0;
 
        public float Value186 { get; set; } = 0;
 
        public float Value187 { get; set; } = 0;
 
        public float Value188 { get; set; } = 0;
 
        public float Value189 { get; set; } = 0;
 
        public short Value190 { get; set; } = 0;
 
        public float Value191 { get; set; } = 0;
 
        public float Value192 { get; set; } = 0;
 
        public float Value193 { get; set; } = 0;
 
        public float Value194 { get; set; } = 0;
 
        public float Value195 { get; set; } = 0;
 
        public float Value196 { get; set; } = 0;
 
        public float Value197 { get; set; } = 0;
 
        public float Value198 { get; set; } = 0;
 
        public float Value199 { get; set; } = 0;
 
        public float Value200 { get; set; } = 0;
 
        public float Value201 { get; set; } = 0;
 
        public float Value202 { get; set; } = 0;
 
        public float Value203 { get; set; } = 0;
 
        public float Value204 { get; set; } = 0;
 
        public float Value205 { get; set; } = 0;
 
        public float Value206 { get; set; } = 0;
 
        public float Value207 { get; set; } = 0;
 
        public float Value208 { get; set; } = 0;
 
        public float Value209 { get; set; } = 0;
 
        public float Value210 { get; set; } = 0;
 
        public float Value211 { get; set; } = 0;
 
        public short Value212 { get; set; } = 0;
 
        public int Value213 { get; set; } = 0;
 
        public int Value214 { get; set; } = 0;
 
        public float Value215 { get; set; } = 0;
 
        public float Value216 { get; set; } = 0;
 
        public float Value217 { get; set; } = 0;
 
        public float Value218 { get; set; } = 0;
 
        public float Value219 { get; set; } = 0;
 
        public float Value220 { get; set; } = 0;
 
        public float Value221 { get; set; } = 0;
 
        public float Value222 { get; set; } = 0;
 
        public float Value223 { get; set; } = 0;
 
        public float Value224 { get; set; } = 0;
 
        public float Value225 { get; set; } = 0;
 
        public float Value226 { get; set; } = 0;
 
        public float Value227 { get; set; } = 0;
 
        public float Value228 { get; set; } = 0;
 
        public float Value229 { get; set; } = 0;
 
        public float Value230 { get; set; } = 0;
 
        public float Value231 { get; set; } = 0;
 
        public object Value232 { get; set; } = null;
 
        public int Value233 { get; set; } = 0;
 
        public int Value234 { get; set; } = 0;
 
        public float Value235 { get; set; } = 0;
 
        public float Value236 { get; set; } = 0;
 
        public float Value237 { get; set; } = 0;
 
        public float Value238 { get; set; } = 0;
 
        public float Value239 { get; set; } = 0;
 
        public float Value240 { get; set; } = 0;
 
        public float Value241 { get; set; } = 0;
 
        public float Value242 { get; set; } = 0;
 
        public float Value243 { get; set; } = 0;
 
        public float Value244 { get; set; } = 0;
 
        public float Value245 { get; set; } = 0;
 
        public float Value246 { get; set; } = 0;
 
        public float Value247 { get; set; } = 0;
 
        public float Value248 { get; set; } = 0;
 
        public float Value249 { get; set; } = 0;
 
        public float Value250 { get; set; } = 0;
 
        public float Value251 { get; set; } = 0;
 
        public float Value252 { get; set; } = 0;
 
        public float Value253 { get; set; } = 0;
 
        public object Value254 { get; set; } = null;
 
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2021, 09:28
Ответы с готовыми решениями:

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework 4, у меня 6-я версия. Один из примеров пришлось...

67
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
13.02.2021, 08:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
Большая разница какая. Тут идёт вопрос по конкретной технологии из мира .NET. Вы в ней разбираетесь? Если нет (судя по ответу - нет), то что вы тут забыли?
То, что вопрос оказался в этом разделе - случайность по сути, потому что автор когда то выбрал эту технологию. И это совершенно не значит, что она ему подходит. Она и не подходит, как мы видим.
Цитата Сообщение от Usaga Посмотреть сообщение
Как минимум снимает необходимость ручной возни с ADO.NET. Как максимум, даёт возможность строить сложные конструкции на SQL из гораздо более простых на C#.
Весь этот профит полностью перекрывается необходимостью костылить, когда выясняется, что ОРМ сделала какую-то фигню, а то и вообще не умеет того, что нужно. А вероятность что такой момент возникнет, как я уже и говорил - 100%.
Цитата Сообщение от Usaga Посмотреть сообщение
Вы не находите, что упорно сами себе противоречите?
Не нахожу. Грядущая автоматизация в сфере веба - это именно высокоуровневая интеллектуальная автоматизация проектирования ПО. А ОРМ - это тупой пенек, который иногда в простых случаях делает то, что нужно, но чаще - то, что хочет. В общем то, ничего удивительного, когда за разработку софта берутся веберы, ничего другого ждать и не приходится - ведь именно они и порождают ОРМ за ОРМом.
Цитата Сообщение от Usaga Посмотреть сообщение
200 человек моих коллег и соседнего отдела с удовольствием бы послушали о том, что нельзя использовать ORM в крупных проектах над которыми они работают и работой которых заказчики довольны как слоны.
Я бы тоже с удовольствием послушал, что они вешают на уши заказчику, который доволен как слон оплачивать за работу этой команды Впрочем, других на рынке не водится, так что заказчику и податься то некуда.

Добавлено через 10 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Надстройка над SQL в виде ORM приводит к тем же последствия, что надстройка над машинными командами в виде какого-то языка: мы теряем в гибкости за счёт существенного увеличения производительности труда.
Это верно, но только для проектов тети Зины. Для более сложных все наоборот, использование ОРМ ведет к снижению производительности труда и качества готового продукта.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
13.02.2021, 10:56
Цитата Сообщение от Катафалк Посмотреть сообщение
Весь этот профит полностью перекрывается необходимостью костылить, когда выясняется, что ОРМ сделала какую-то фигню, а то и вообще не умеет того, что нужно
Вроде, не перекрывается, а дополняется. Фигню ОРМ делать не умеет, фигню делают программисты, как на голом SQL, так и на любых надстройках над нему. Как правило, ОРМ не очень хорошо справляется с какими-то сложными аналитическими запросами, но он и не предназначен для этих целей, для этого у аналитиков какие-то свои инструменты.

Цитата Сообщение от Катафалк Посмотреть сообщение
использование ОРМ ведет к снижению производительности труда и качества готового продукта
Вероятно, от проекта зависит. Когда-то давно я про ОРМ вообще ничего не знал и всю работу с БД делал исключительно на голом SQL. Это порождало как постоянную лишнюю работу по написанию этих самых запросов, так и чисто механические опечатки. И постепенно над SQL сформировались обвязки, которые сначала просто скрывали рукописный SQL, а потом и вовсе начали его генерировать для простых сценариев. Потом уже, на новых проектах, начал использовать готовые ORM, и это очень упростило работу, т.к. в большинстве случаев и кода меньше, и шанс допустить опечатку ниже, и интеллисенс прямо в коде работает, и не надо для проверки/отладки запроса переключаться на другие приложения.

Т.е. у меня это чисто практический подход, т.е. если где-то написание голого SQL оказывается более удобными/эффективным, то он используется вместо/вместе с ORM, но толку страдать с SQL там, где можно применить более удобные инструменты я тоже не вижу.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
13.02.2021, 11:12
Цитата Сообщение от kotelok Посмотреть сообщение
Как правило, ОРМ не очень хорошо справляется с какими-то сложными аналитическими запросами, но он и не предназначен для этих целей, для этого у аналитиков какие-то свои инструменты.
Так о том и речь - ОРМ не пригодны ни для чего, кроме примитивного круда.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
13.02.2021, 11:43
Цитата Сообщение от Катафалк Посмотреть сообщение
Так о том и речь - ОРМ не пригодны ни для чего, кроме примитивного круда.
CRUD (в т.ч. частичные выборки без необходимости каждый раз вручную специфичный запрос писать), join и group с несложной статистикой. Ну и отслеживание изменений штука весьма полезная, т.к. если его нет, то в том или ином виде он всё равно велосипедится для части сценариев (хотя, по умолчанию я его всегда отключаю). И это покрывает большую часть потребностей типового приложения работы с базой (независимо от размера), и на этой большей части даёт упрощение работы и повышение эффективности программистов.

Я к тому, что не очень понимаю как категоричного отказа от ORM там, где его польза очевидна в плане экономии времени/сил, так и попыток "впихнуть невпихуемое" в тех слуаях, когда использование прямого SQL и проще, и эффективнее.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
13.02.2021, 12:45
Цитата Сообщение от Катафалк Посмотреть сообщение
Так о том и речь - ОРМ не пригодны ни для чего, кроме примитивного круда.
Ага, только этот самый CRUD обычно занимает толстую часть всей логики среднего приложения (а иногда и сложного).
Когда приходится лезть в несколько таблиц сразу и при этом соблюсти 100% транзакциозность. И делается это десятком строк кода, лаконичного и предельно ясного. В то время, как в "голом" ADO нужно сотни строк с раскоряченными текстами SQL-запросов, разобраться в которых сможет только человек, разбирающийся в диалектах SQL. А таких, уверяю Вас, немного меньше, чем хотелось бы. Плюс все эти AddParameter, using..
Спасибо, кушали
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
13.02.2021, 21:15
Цитата Сообщение от kotelok Посмотреть сообщение
Я к тому, что не очень понимаю как категоричного отказа от ORM там, где его польза очевидна в плане экономии времени/сил, так и попыток "впихнуть невпихуемое" в тех слуаях, когда использование прямого SQL и проще, и эффективнее.
Существует ровно два условия, при которых использование ОРМ в проекте допустимо:
1) Работа с БД в проекте примитивна, в ней нет ничего, кроме круда.
2) В плане работы с БД в будущем даже теоретически не может возникнуть потребности использовать что-то сложнее круда.
Если хоть одно из этих условий нарушается, то применение ОРМов приведет только к говнокоду - если не сразу же сейчас, то в будущем.
И тут мы приходим к тому, что ОРМ в принципе бесполезен для любых проектов. Поскольку, в указанных простейших случаях без него можно обойтись голым SQL, тащить лишнюю зависимость в проект ради селекта совершенно излишне. А в сложных проектах, для которых ОРМы, вроде как и созданы, они совершенно неприменимы.
Цитата Сообщение от MsGuns Посмотреть сообщение
Ага, только этот самый CRUD обычно занимает толстую часть всей логики среднего приложения (а иногда и сложного).
Это только если приложение само по себе представляет голый круд Впрочем, веберы других и не знают. Даже представить себе другое приложение не могут.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
13.02.2021, 21:42
Катафалк
Ну так я об этом и говорю - есть сложный проект, где есть и CRUD (и чуть более сложные join/group-запросы), и увесистые аналитические запросы. В рамках этого проекта:
1. Используется ORM в тех сценариях, где он упрощает разработку по сравнению с прямым SQL.
2. Используется SQL напрямую (+ маппер) в тех сценариях, где он даёт лучшие результаты, чем ORM.

Т.е, да, каждый инструмент под свои задачи.

Если же речь про какой-то вариант идеологического перфекционизма "пишем только на чём-то одном", то ок, но это уже просто вопрос личных предпочтений. Я больше ориентируюсь на эффективность разработки, где использование ORM оправдано в определённых рамках.
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
13.02.2021, 23:47
Цитата Сообщение от Катафалк Посмотреть сообщение
Даже представить себе другое приложение не могут.
Да что Вы говорите
Представьте себе: есть довольно развитая MRP, в которой крутится несколько десятков очень даже кучерявых приложений. Ею пользуются практически все службы предприятия: конструкторы, технологи, ПЭО/ПДО, ОТИЗ, отдел кадров, бухгалтерия, цехи и т.д.
90% задач вертится вокруг состава заказа с "навешанными" на него "доспехами" в виде неликвида в цехах, остатков на СГД, пооперационной трудоемкости, конструкторско-технологической документации, норм расхода, плановых калькуляций и т.д.
Там одних алгоритмов выборок под полтыщи, включая пару сотен отчетов. Как Вы понимаете, алгоритмов не тривиальных. SQL-пакеты там тоже некислые, есть на 400-500 строк.

И все это вертится на ORM. Конечно, местного розлива, в свою очередь во всю пользующейся EF. Куча алгоритмов реализована на сервере (View, UDF, SP), но прекрасно вписана в Модель.
Тут, конечно, нет веба. По понятной причине. Но, если бы возникла необходимость, то перевод на веб заключался бы на 80-90% в программирование фронта, т.к. вся логика обмена с СУБД уже заложена в Модели (ORM).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.02.2021, 23:47

Entity Framework

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце связь была &quot;один&quot; и &quot;ноль или один&quot;-не...

Entity Framework
Здравствуйте, пока только начал работать с C# WPF и EF. Возникла такая проблема, я создал базу в MS Sql. Создал модель EF по готовой базе...

Проблемы с Entity framework
Не создается таблица. Прописываю миграцию, нормально, после этого update - пишет что cannot find the object because it does not exist...

Entity Framework Core проблемы подключения
Доброго времени суток. При подключении пакетов EFCore.SQLServer и EFCore.Tools как через NuGet так и через консоль возникает ошибка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
68
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru