|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Мне нужно загрузить кучу данных, в которых могут встречатся дублирующая информация - ее мне нужно игнорировать: Код: c# 1. 2.
Но оно не работает, если после каждой вставки не сохранять информацию в БД. А мне не хотелось бы вызывать SaveChanges после каждой строки документа, состоящего из тысяч строк. Можно как-то заставить EF при поиске искать и в локальном кеше ? PS. Вообще можно ли сделать так, чтобы EF при вставке в БД сам проверял наличие информации (по поисковому запросу - например по номеру документа), и вставлял только отсутствующую ? Т.е. некий аналог SQL Merge. Просто, ведь, DbContext.Documents.FirstOrDefault тоже каждый раз будет делать обращение к бд. А значит будет тысячи обращений, при вставке данных. Хотелось бы свести это все к единственному обращению в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 12:48 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlder, Если поиск по первичному ключику PK то должно все работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 13:53 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Petro123, Не по первичному ключу. Добавляется документ с уникальным номером. А ключ это сгенеренный в базе ID. Хотелось бы иметь возможность искать в локальном кэше по номеру документу. А еще больше хотелось бы, чтобы уже при bulk вставке в базу производились эти проверки. Чтобы не пулять тысячу маленьких запросиков, а один, пусть и большой. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 14:17 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Тут не подскажу. EF не знаю. А если так: Коллекция строк изначально должна быть без дублей? Откуда дубляж? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 14:32 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Мне кажется что переносить какую-то даже простейшую BL в EF не имеет никакого смысла да и не совсем корректно. Почему бы не вставлять данные уже заведомо отфильтрованные. А проверять у БД все равно придется , если например там уже есть строка с таким номером документа. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 15:32 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Дело в том, что данные загружаются из разных файлов excel. Дубли могут быть, и нужно игнорировать повторные попытки загрузить. Это можно сделать через: Код: c# 1. 2. 3.
Но мне не нравится шквал запросов в базу данных. По уму бы все делать в одном запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 16:42 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Любой ОРМ проверяет разность объектов по PK ID в базе. У тебя объект ещё не сохранялся значит id не назначен. Значит сравнение по Обычному полю это бизнес логика и должна быть вне EF. Выше верно сказали. Один входной файл это сессия и коммит. Либо собирай их вместе и коллекцией dictionary отбрось дубли. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 16:53 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Petro123, Дубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу. Т.е. делать тысячу запросов в базу вида FirstOrDefault (x=> x.DocNumber== y.DocNumber). Как я могу от этого избавится ? Как можно сделать bulk вставку с проверкой в момент добавления ? Ну я могу конечно написать процедуру t-sql и закидывать туда табличный параметр - но это все без EF. А с EF можно что-то сделать более менее эффективное в плане производительности то ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:00 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlder, IMHO EF и любой ОРМ не пркдназначен для массовой пакетной заливке ....bulk. Делай без него хранимкой или xml, json, .... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:04 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlder, Еще вариант, список TDict <int> и очистка когда решил скинуть в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:11 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Petro123Любой ОРМ проверяет разность объектов по PK ID в базе. В NHiberbate есть возможность настроить проверку не по ID, а по полям, так что не стоит обобщать. Возможно и в EF это есть. Но ИМХО задачу явно надо решать иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:23 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlderДубли могут быть в РАЗНЫХ файлах. А как Вы понимаете, что это именно дубли, а не обновлённая версия данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:25 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlderМожно как-то заставить EF при поиске искать и в локальном кеше ? Никак. Кеш у EF не для того, чтобы по нему выполнять запросы. Поэтому никак вообще. Совсем. Прям тотальное НЕТ. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:39 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlderА с EF можно что-то сделать более менее эффективное в плане производительности то ? Хм, AddOrUpdate ? Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:40 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlderДубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу. Грузите всё в отдельную таблицу, потом делайте запрос на выявление и удаление дубликатов, потом сливайте данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:42 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
skyANAХм, AddOrUpdate ? Код: c# 1.
Т.е. по натуральному ключу И это не производительно для большого объёма строк. На каждую запись будет запрос в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:43 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
TsHeloWorlder, Ещё вариант по-сложнее, постройте индекс в памяти по данным в БД, и оперируйте этим индексом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:45 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
skyANA, Я немного шире взял. Т.е. в разных сессиях, параллельно 2 юзверя правят Один объект. У хибера один, это значит по id. Но в разных сессиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:47 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
И где же программирование, программисты? )))) Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 17:53 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
hVosttTsHeloWorlderДубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу. Грузите всё в отдельную таблицу, потом делайте запрос на выявление и удаление дубликатов, потом сливайте данные. Я за этот вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 18:20 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Я за все варианты). БЛ может быть в базе и может коде c# кто базу не любит. Удачи аффтару! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 18:35 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Petro123БЛ может быть в базе и может коде c# кто базу не любит. А можно до безумия любить базу, любить писать SQL запросы,.. и всё равно не размещать БЛ в базе, потому что интеллекта хватает — не делать таких глупых вещей ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 18:43 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
hVostt, Дак ты сам предложил бл в базе). Я все варианты люблю если чё.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 19:12 |
|
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
|
|||
---|---|---|---|
#18+
Petro123hVostt, Дак ты сам предложил бл в базе). Я все варианты люблю если чё.)) Это не БЛ в базе. Просто сырые данные заливаются в специальные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2017, 19:21 |
|
|
start [/forum/topic.php?fid=17&msg=39507086&tid=1349268]: |
0ms |
get settings: |
111ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 439ms |
total: | 830ms |
0 / 0 |