2015-08-24 8 views
0

Я относительно новичок в программировании, поэтому вот мой вопрос.Сохранить записи в базе данных в объекте?

У меня есть приложение C# -Forms и база данных доступа. В базе данных у меня есть данные о 200-300 машинах (Название, Год постройки, ...) В моем приложении форм я показываю все автомобили в списке, и у меня есть фильтр, где я могу искать конкретные слова и типы и так далее.

В настоящий момент я реагирую на любой вход фильтра, а затем выполняю новый sql-запрос и перечисляю все автомобили, которые соответствуют фильтру.

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

Это жизнеспособный способ создания класса автомобилей и создания экземпляра этого класса для каждого автомобиля и хранения их в списке? Каков наилучший способ обработки всех 200 автомобилей без их повторного чтения из базы данных?

ответ

0

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

+0

Спасибо большое!:) Я собираюсь попробовать это, когда я дома. –

+0

и не забывайте, что MemoryCache находится в System.Runtime.Caching – Khatibzadeh

+0

Есть ли причина, по которой вы используете IList, а не List для методов? –

1

Если данные вашего автомобиля не изменяются часто, чем вы можете сохранить в данных памяти и после этого фильтра.

Когда новая запись добавлена, вам необходимо обновить данные в памяти.

+0

Нет, это не меняется часто. С данными памяти вы имеете в виду создание экземпляров? –

+0

, когда приложение начинает извлекать данные только один раз и сохраняет в любом объекте коллизии и кеше в кеше времени выполнения (ref System.Runtime.Caching), когда вы извлекаете этот фильтр записи из объекта кеша – ITGenius

0

Это скорее философский вопрос, чем технический, поэтому я бы хотел дать вам 2 цента на этом. Если база данных «Автомобили» изменена только вашим приложением, а приложение запускается одним человеком, вы можете прочитать данные один раз и установить механизм в своем пользовательском интерфейсе для загрузки данных в памяти, когда через пользовательский интерфейс вы обновляете базу данных. Если у вас есть несколько пользователей, использующих данные и обновляющие базу данных, чтобы один пользователь мог добавлять автомобили в базу данных, а другой читал ее для выполнения какой-либо операции над ними, вы должны подготовить механизм для проверки того, были ли данные изменены кто-то еще в системе всем пользователям, чтобы они могли перезагрузить список автомобилей. (это может быть что-то вроде временного запроса к таблице, где вы запоминаете последнюю дату и время обновления таблицы автомобилей, например, или это может быть что-то более сложное в разных случаях). Указано так. Обычно при работе с базами данных я готовлю класс DataProvider, который «говорит» с базой данных, создавая, обновляя, удаляя и запрашивая данные, класс, который представляет таблицу строк моих данных (в вашем случае класс Car) и DataProvider возвращает список для моего пользовательского интерфейса, который я могу использовать как есть, или, если необходимо, я могу перейти к ObservableCollection, если вы используете его с объектами интерфейса WPF, и данные могут измениться, или я могу создать что-то вроде объекта UICar, который Автомобиль плюс другие свойства, связанные с его использованием внутри пользовательского интерфейса, которые могут быть более полезны для обеспечения действий и функциональности для пользователя, использующего ваше приложение. Когда у вас есть коллекция автомобилей в вашем приложении, поиск в памяти данных с помощью простого запроса Linq становится довольно простым в реализации и гораздо более эффективным, чем вызов базы данных при любых изменениях в текстовом поле поиска. Кроме того, чтобы избежать запроса (память или db одинаково) при любом нажатии клавиши, установите таймер (всего несколько миллисекунд) перед запуском запроса в ключевом событии, чтобы, если пользователь вводит слово, запрос начинается, когда он/она перестает печатать. HTH

Смежные вопросы