powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
25 сообщений из 106, страница 1 из 5
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39506771
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно загрузить кучу данных, в которых могут встречатся дублирующая информация - ее мне нужно игнорировать:

Код: c#
1.
2.
  if (DbContext.Documents.FirstOrDefault (x=> x.DocNumber== y.DocNumber) == null)
    DbContext.Documents.Add (y);



Но оно не работает, если после каждой вставки не сохранять информацию в БД. А мне не хотелось бы вызывать SaveChanges после каждой строки документа, состоящего из тысяч строк.

Можно как-то заставить EF при поиске искать и в локальном кеше ?


PS. Вообще можно ли сделать так, чтобы EF при вставке в БД сам проверял наличие информации (по поисковому запросу - например по номеру документа), и вставлял только отсутствующую ? Т.е. некий аналог SQL Merge. Просто, ведь, DbContext.Documents.FirstOrDefault тоже каждый раз будет делать обращение к бд. А значит будет тысячи обращений, при вставке данных. Хотелось бы свести это все к единственному обращению в базу.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39506828
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlder,
Если поиск по первичному ключику PK то должно все работать.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39506851
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Не по первичному ключу. Добавляется документ с уникальным номером. А ключ это сгенеренный в базе ID. Хотелось бы иметь возможность искать в локальном кэше по номеру документу. А еще больше хотелось бы, чтобы уже при bulk вставке в базу производились эти проверки. Чтобы не пулять тысячу маленьких запросиков, а один, пусть и большой.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39506867
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут не подскажу. EF не знаю.
А если так: Коллекция строк изначально должна быть без дублей? Откуда дубляж?
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39506953
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется что переносить какую-то даже простейшую BL в EF не имеет никакого смысла да и не совсем корректно. Почему бы не вставлять данные уже заведомо отфильтрованные.
А проверять у БД все равно придется , если например там уже есть строка с таким номером документа.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507010
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что данные загружаются из разных файлов excel. Дубли могут быть, и нужно игнорировать повторные попытки загрузить.

Это можно сделать через:
Код: c#
1.
2.
3.
if (DbContext.Documents.FirstOrDefault (x=> x.DocNumber== y.DocNumber) == null)
{    DbContext.Documents.Add (y);
    DbContext.SaveChanges();  }



Но мне не нравится шквал запросов в базу данных. По уму бы все делать в одном запросе.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507017
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любой ОРМ проверяет разность объектов по PK ID в базе.
У тебя объект ещё не сохранялся значит id не назначен.
Значит сравнение по Обычному полю это бизнес логика и должна быть вне EF. Выше верно сказали.
Один входной файл это сессия и коммит. Либо собирай их вместе и коллекцией dictionary отбрось дубли.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507029
TsHeloWorlder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Дубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу. Т.е. делать тысячу запросов в базу вида FirstOrDefault (x=> x.DocNumber== y.DocNumber). Как я могу от этого избавится ?

Как можно сделать bulk вставку с проверкой в момент добавления ? Ну я могу конечно написать процедуру t-sql и закидывать туда табличный параметр - но это все без EF. А с EF можно что-то сделать более менее эффективное в плане производительности то ?
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507031
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlder,
IMHO EF и любой ОРМ не пркдназначен для массовой пакетной заливке ....bulk.
Делай без него хранимкой или xml, json, ....
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507035
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlder,
Еще вариант, список TDict <int> и очистка когда решил скинуть в базу.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507040
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Любой ОРМ проверяет разность объектов по PK ID в базе.
В NHiberbate есть возможность настроить проверку не по ID, а по полям, так что не стоит обобщать.
Возможно и в EF это есть.

Но ИМХО задачу явно надо решать иначе.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507043
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderДубли могут быть в РАЗНЫХ файлах.
А как Вы понимаете, что это именно дубли, а не обновлённая версия данных?
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507052
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderМожно как-то заставить EF при поиске искать и в локальном кеше ?

Никак. Кеш у EF не для того, чтобы по нему выполнять запросы. Поэтому никак вообще. Совсем.
Прям тотальное НЕТ.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507054
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderА с EF можно что-то сделать более менее эффективное в плане производительности то ?
Хм, AddOrUpdate ?

Код: c#
1.
DbContext.Documents.AddOrUpdate(d => d.DocNumber, document);
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507056
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlderДубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу.

Грузите всё в отдельную таблицу, потом делайте запрос на выявление и удаление дубликатов, потом сливайте данные.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507058
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХм, AddOrUpdate ?

Код: c#
1.
DbContext.Documents.AddOrUpdate(d => d.DocNumber, document);



Т.е. по натуральному ключу И это не производительно для большого объёма строк. На каждую запись будет запрос в БД.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507059
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsHeloWorlder,

Ещё вариант по-сложнее, постройте индекс в памяти по данным в БД, и оперируйте этим индексом.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507060
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Я немного шире взял.
Т.е. в разных сессиях, параллельно 2 юзверя правят Один объект.
У хибера один, это значит по id. Но в разных сессиях.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507066
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И где же программирование, программисты? ))))
Код: c#
1.
2.
if (dictionary [НомерДокумента] != номерИзXLS) 
Add в базу
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507078
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttTsHeloWorlderДубли могут быть в РАЗНЫХ файлах. Т.е. нужно проверять наличие документа из файла с теми, что уже загружены в базу.

Грузите всё в отдельную таблицу, потом делайте запрос на выявление и удаление дубликатов, потом сливайте данные.
Я за этот вариант.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507086
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я за все варианты).
БЛ может быть в базе и может коде c# кто базу не любит.
Удачи аффтару!
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507094
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123БЛ может быть в базе и может коде c# кто базу не любит.

А можно до безумия любить базу, любить писать SQL запросы,.. и всё равно не размещать БЛ в базе, потому что интеллекта хватает — не делать таких глупых вещей
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507123
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Дак ты сам предложил бл в базе).
Я все варианты люблю если чё.))
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507136
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVostt,
Дак ты сам предложил бл в базе).
Я все варианты люблю если чё.))
Это не БЛ в базе. Просто сырые данные заливаются в специальные таблицы.
...
Рейтинг: 0 / 0
Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
    #39507145
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Главное верить что это не БЛ).
...
Рейтинг: 0 / 0
25 сообщений из 106, страница 1 из 5
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как искать сущности, которые еще не сохранены в бд, т.е. которые пока только локальные ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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