EF 6.4 DbCommandInterceptor корреляция C# - PullRequest
1 голос
/ 22 января 2020

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

пример:

public class UtcReadInterceptor : DbCommandInterceptor
{
    public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        foreach (DbParameter p in command.Parameters)
        {
            if (p.DbType != DbType.DateTime2 || ShouldSkip(p)) { continue; }

            var date = p.Value as DateTime?;

            if (!date.HasValue) { continue; }

            p.Value = date.Value.ToUniversalTime()
        }

        base.ReaderExecuting(command, interceptionContext);
    }
} 

private bool ShouldSkip(DbParameter p)
{
   // Look up the parameter in EF metadata and choose ignore or let through.
}

Что я ищу, так это какой-то способ узнать, является ли данное поле не должен быть преобразован в UT C. Мне нужно как-то либо посмотреть, какое это поле (и какая сущность) в контексте, или каким-либо образом пометить его в каком-то поиске, чтобы можно было узнать, пропустить его или нет.

Кто-нибудь знает как соотнести параметр с полем в сущности EF или как-то изменить параметр из EF, чтобы узнать, можно ли его пропустить при преобразовании параметров даты и времени в UT C?

1 Ответ

1 голос
/ 30 января 2020

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

Единственный способ разделить типы столбцов - это установить один тип в DateTimeOffset, а другой - просто DateTime. Которые поступают как параметры db типов DateTime и DateTime2

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