|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
У меня есть DbContext, он выдаёт грид. Я получаю View нужной мне таблицы Код: c# 1. 2. 3. 4. 5.
и уже peopleView является источником данных для DataGrid. Пользователь что-то редактирует в этих строках, и как только строка оказывается отредактированной, у меня выполняется Код: c# 1. 2. 3. 4.
Т.е. я не контролирую то, что ввёл пользователь. DBContext сразу себе берёт всё введённое и сохраняет. Проблема выявляется с датой. СУБД у меня - SQLite. Пользователь вводит дату в одном формате, а сохраняться она должна в другом. Куда и как можно вписать прослойку, чтобы я мог полностью контролировать, что конкретно запишется в БД и в каком формате? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2018, 01:30 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласен, Тут много вариантов. Решать тебе: 1. Если десктоп(клиент-сервер), то прослойка в виде ОРМ обычно не делается. Просто перехват исключения и вывод на экран. Если бизнес логика(БЛ) на сервере, то и отправка исключения с сервера. На клиенте только перехват КОДА ИСКЛЮЧЕНИЯ. Например констрейнт-ограничение по уникальности или ФОРМАТ ДАТЫ НЕ СООТВЕТСТВУЕТ ТИПУ ПОЛЯ В БД. зы В веб проектах и ОРМ делается промежуточный слой т.к. логик обычно не в БД а на АппСервере. Не знаю насколько в шарпе умеет DbContext быть АппСервером в двухзвенке. хорошо я согласенСУБД у меня - SQLite. Пользователь вводит дату в одном формате, а сохраняться она должна в другом. если конкретно, то проверь, есть ли тип даты или ограничения в самой БД чтобы выдать наверх исключения и не сохранять так как не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2018, 15:09 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенСУБД у меня - SQLite Значит Модель у тебя в базе. Основное в Модели - это непротиворечивость данных. Делай чтобы в базу с любого клиента нельзя было записать мусор(триггер, констрейнт, FK, PK, XP,...) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2018, 15:20 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Я поясню: пользователь пишет: 29 января. (вернее, он это может откуда-то скопировать и вставить строку в мой грид, либо использовать контрол, который выдаст ему дату в таком формате и пр.). Ему не нужен год, т.к всегда считается, что это текущий. Значит, Он пишет 29.01, а в БД должна поступить инфа 29.01.2018. Получается, что он пишет верную дату, а как её на лету скорректировать, чтобы в БД она записалась как '20180129' - не понятно. Пока решение у меня созрело такое, чтобы в ячейку впихнуть на отображение свой MyDateViewControl. Надеюсь, это верное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2018, 17:35 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенПолучается, что он пишет верную дату, а как её на лету скорректировать, чтобы в БД она записалась как '20180129' - не понятно. Пока решение у меня созрело такое, чтобы в ячейку впихнуть на отображение свой MyDateViewControl. Надеюсь, это верное решение. Да. После того как все ошибочные будут отсеиваться в бд вы делаете чисто для удобства контрол, ГУИ для ввода. Это может быть свой или готовый из сети кусок библотеки. Лучше поищите что готовое прежле чем писать. В крутом гриде уже есть колонка с типом дата. Какой конкретно грид? Моё imho в том что лучше иметь поле дата и там выбирать дату, чем иметь поле строка и потом конвертировать. В крупных проектах могут делать myDataControl на все проекты сразу. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2018, 18:04 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
если текстовое поле связано со свойством типа DateTime, то при вводе некорректной она не будет передана в источник. Как по мне, лучше использовать контрол который ограничивает ввод даты по шаблону, так как с этими датами гемороя не оберешься 01/11/2012, это 11 января или 1 ноября? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 12:50 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Roman Mejtesесли текстовое поле связано со свойством типа DateTime, то при вводе некорректной она не будет передана в источник. Как по мне, лучше использовать контрол который ограничивает ввод даты по шаблону, так как с этими датами гемороя не оберешься 01/11/2012, это 11 января или 1 ноября? Или обычная валидация , в конце концов. Зачем тут какие-то прослойки? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 12:58 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Roman Mejtesесли текстовое поле связано со свойством типа DateTime, то при вводе некорректной она не будет передана в источник. Как по мне, лучше использовать контрол который ограничивает ввод даты по шаблону, так как с этими датами гемороя не оберешься 01/11/2012, это 11 января или 1 ноября? сверху в заголовке указано "2018" без возможности её изменения - в базу запрещено вносить любые даты за пределами этого года. Соответственно, пользователь работает только с месяцем и числом, без года. Поэтому дата "11 марта" - дата корректная. И если она не запишется в поле базы данных ("потому что не указан год") - это будет неверным поведением. Это ж SQLite. Каждый файл посвящён отдельному году. Объединения годов в одном файле не будет по разным причинам, в т.ч. потому что SQLite не выдержит большого объёма данных и потому что пользователь хочет разные года сохранять в разные файлы - ему это удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 13:51 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенЭто ж SQLite. Каждый файл посвящён отдельному году. Объединения годов в одном файле не будет по разным причинам, в т.ч. потому что SQLite не выдержит большого объёма данных и потому что пользователь хочет разные года сохранять в разные файлы - ему это удобно. Подробнее. Мне кажется это полная ересь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 13:55 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенсверху в заголовке указано "2018" без возможности её изменения - в базу запрещено вносить любые даты за пределами этого года.т.е. вы бизнес подстроили под базу? Прикольно)) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 13:58 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенSQLite не выдержит большого объёма данныхвсе базы имеют максимум. Для этого есть у всех есть штатные операции - выгрузить, архивировать, загрузить и т.д. Держите с 31 на 1 января оба года, а потом в 2019 году выгрузите любой год. Т.е. база тут ни при чем. И текущий год устанавливают не из за базы как вы тут описали. По другим причинам. ... 11 марта пишите в базу. Просто такой контрол сложнее и везде на лбу должен висеть текущий год. У меня в проекте, заказчик требовал чтобы в каждом окне висел год. Т.е. юзверь его мог сменить одним кликом. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 14:11 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Глянул базу на ветке субд. У чела база на 250 млн. Записей. Поэтому проблему автора про базу и файлы базы я не понял. А про даты тут рассмотрели все варианты. Удачи аффтару! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 14:25 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласен, понятно, что в SQLite нет типа DATETIME и Вы используете TEXT но в модели-то можно использовать DateTime, как в следующем примере свойство DayOfBirth: Код: 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.
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 15:42 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
С точки зрения пользователя: Он создаёт новый файл, указывает "мероприятия за 2018 год". При создании в окне "визарда" выбирает "2018" -его не интересует 2017-й, 2019-й. В колонке "дата" его интересует только месяц-день и "вымораживает" постоянное повторение "2018", поскольку "и так ясно, о каком годе идёт речь, другого не дано". Пользователя вообще не волнуют предыдущие года, он их вообще удаляет, поэтому проблема стояла не в том, что "несколько лет не умещается в один файл". А вообще в другом: Пользователь хочет вводить в ячейку "11 января". Но эта строка напрямую улетает в БД, что неверно. В самой "БД" тип указан date и записаться "11 января" должно в формате "20180111". Вопрос был в том, как реализовать прослойку, ибо DataGrid использует таблицу из DbContext в качестве источника и всё записанное в ячейках DataGrid сразу отправляется в DbContext. Я не придумал ничего лучше, чем создать свой компонент, отображаемый в ячейке. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 15:59 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенОн создаёт новый файл, указывает "мероприятия за 2018 год". он же не знает что там какой то файл или не файл? Тебе как программисту выгодно чтобы способ хранения или физическая схема не была видна юзверю. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:12 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенОн создаёт новый файл, указывает "мероприятия за 2018 год" У нас было так: Новый плановый ГОДОВОЙ период. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:13 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенпоэтому проблема стояла не в том, что "несколько лет не умещается в один файл". А вообще в другом: сам привёл пример что у тебя SQLite авторпотому что SQLite не выдержит большого объёма данных это враньё. Если бы не врал, то и разговора бы не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:15 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенЯ не придумал ничего лучше, чем создать свой компонент, отображаемый в ячейке. по фоакту, без архитектуры тебе выше сказали ещё 3-4 варианта. Хочешь скилы повышать - пробуй. До свидос! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:17 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Petro123он же не знает что там какой то файл или не файл? Тебе как программисту выгодно чтобы способ хранения или физическая схема не была видна юзверю. Так? Пользователь знает, что такое "экселевский" файл, "вордовский", и теперь знает, что такое "Мерпопревский" (от слова "Меропр", название программы). Есть "файл"-"открыть". Так что он очень хорошо понимает и знает, что такое файл и в одном файле он никогда не будет вести мероприятия за разные года. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:32 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Petro123До свидос! ну "досвидос", так "досвидос". Мне кажется, тебе показалось, что вопрос я задаю лично тебе и лично от тебя жду ответов. А ведь всё просто - если ты не хочешь отвечать или рассуждать на какую-то тему, можешь просто игнорировать. Лично я так всегда и делаю. Решения я прочитал и принял к сведению, поэтому и пишу, что хорошо я согласенпроблема сто яла P.s. как всегда, благодарен пользователям Сон Веры Павловны и Roman Mejtes за ответы и наводящие вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 16:38 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенМне кажется, тебе показалось, что вопрос я задаю лично тебе и лично от тебя жду ответов вот ведь странные. Если я сказал что досвидос, значит мне что то показалось? Если врут в топике, я сразу так и говорю: "Вы соврали". Инженеры и врачи, они знаете - такие))). А игнор у вас или неигнор - мне абсолютно пофигу. Тема то закрыта). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 17:03 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенот слова "Меропр", название программы )) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 17:05 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
Petro123, так "досвидос" же. Разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 17:43 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласенPetro123, так "досвидос" же. Разве нет? не флуди. Иди БД изучай. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 17:51 |
|
Как сделать прослойку между гридом и DbContext?
|
|||
---|---|---|---|
#18+
хорошо я согласен, мне кажется, что Вам будет полезно почитать http://www.sqlite.org/datatype3.html указать-то Вы DATE можете, только на деле это совсем не DATE ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2018, 19:24 |
|
|
start [/forum/topic.php?fid=21&msg=39580577&tid=1440456]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
184ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 313ms |
0 / 0 |