Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296

Преобразование собственного класса к типу данных БД

31.10.2024, 05:08. Показов 766. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Возникла банальная проблема - нужно хранить в postgresql таблицу, в которой одна из колонок является типом timestamp without time zone.
Ранее похожую проблему решал таким образом - тип был timestamp witр time zone, на бэкенде ставил тип DateTime, вешал к нему конвертер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class DateTimeConverter : JsonConverter<DateTime>
    {
        public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            Debug.Assert(typeToConvert == typeof(DateTime));
            return DateTime.Parse(reader.GetString());
        }
 
        public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
        {
            writer.WriteStringValue(value.ToUniversalTime().ToString("dd'.'MM'.'yyyy'T'HH':'mm':'ssZ"));
        }
    }
и цеплял в services. Проблема в том, что конвертер применяется массово и это доставляет неудобства.
Сейчас решил пойти другим путем - создал класс:
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
    [Serializable]
    public class DbDateTime
    {
        public int Year { get; set; }
        public int Month { get; set; }
        public int Day { get; set; }
        public int Hour { get; set; }
        public int Minute { get; set; }
        public int Second { get; set; }
 
 
        public DbDateTime()
        {
 
        }
        public DbDateTime(int year, int month, int day, int hour, int minute, int second)
        {
            Year = year;
            Month = month;
            Day = day;
            Hour = hour;
            Minute = minute;
            Second = second;
        }
 
 
        public override string ToString()
        {
            string result = string.Format("{0:d2}.{1:d2}.{2:d4}T{3:d2}.{4:d2}.{5:d2}", Day, Month, Year, Hour, Minute, Second);
            return result;
        }
        public DbDateTime Parse()
        {
            return new DbDateTime();
        }
    }
и использую его вместо DateTime. Также навесил конвертер, чтоб понятно было как его паковать в JSON
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class DbDateTimeConverter : JsonConverter<DbDateTime>
    {
        public override DbDateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            Debug.Assert(typeToConvert == typeof(DbDateTime));
            return new DbDateTime(); //TODO parser
        }
 
        public override void Write(Utf8JsonWriter writer, DbDateTime value, JsonSerializerOptions options)
        {
            writer.WriteStringValue(value.ToString());
        }
    }
, но получаю ошибку:
Code
1
The 'DbDateTime' property 'LogWarnDb.DateTimeUtc' could not be mapped because the database provider does not support this type. Consider converting the property value to a type supported by the database using a value converter
Подозреваю, что проблема в том, что Entity Framework не знает что делать с этим типом, но не знаю как ему объяснить.
Спасибо за помощь!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2024, 05:08
Ответы с готовыми решениями:

Написание собственного итератора для собственного класса Matrix
Написал класс Matrix(запрещено использовать для хранения данных контейнеры STL, вся работа с памятью реализуется вручную). Но итератор не...

Запись в собственного класса бинарный файл собственного
есть Свой тип данных дробь. Надо реализовать запись и загрузку в\из бинарного файла. #ifndef RATION_H #define RATION_H #include...

Передача данных из собственного класса Unit2 в Unit1 -> Edit3
Всем добрый вечер! У меня возникла проблема, при передачи данных из собственного класса в Unit2 в Unit1 -&gt; Edit3 выскакивает ошибка: ...

2
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
31.10.2024, 06:40
Лучший ответ Сообщение было отмечено a13428711 как решение

Решение

a13428711, официальную документацию надо читать: Value Conversions
1
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
31.10.2024, 17:55  [ТС]
Usaga, Спасибо большое, то что нужно!
Документацию читал, но не знал как правильно называется то, что ищу.

Выкинул конвертер, добавил в DbContext
C#
1
2
3
4
5
6
7
8
9
10
11
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
 
            modelBuilder.Entity<LogWarnDb>()
                .Property(e => e.DateTimeUtc)
                .HasConversion<DateTime>(
                    v => v.ToDateTime().ToUniversalTime(),
                    v => DbDateTime.FromDateTime(v)
                );
        }
и всё завелось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2024, 17:55
Помогаю со студенческими работами здесь

Член класса управляемый не может относиться к типу класса неуправляемый
Подскажите пожалуйста, что за ошибка &quot;Член класса управляемый не может относиться к типу класса неуправляемый&quot;? #include...

Как сделать явное приведения переменной типа класса-наследника к типу базового класса?
Читал, что для этого нужно явное приведение к типу, но на практике выдаёт ошибку. Вот код: using System; using System.Linq; namespace...

Преобразование к типу TDBGridEh
как преобразовать тип TWinControl к типу TDBGridEh или тип TComponent к типу TDBGridEh

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

Преобразование к типу Число
Здравствуйте, подскажите пожалуйста, как можно исправить ошибку {Документ.ЗаказПокупателя.Форма.ФормаЗаказ.Форма(38)}: Преобразование...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru