Как справиться с обработкой DateTimeOffset между SQL Server и Sqlite при использовании несопоставленного типа в EF CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как справиться с обработкой DateTimeOffset между SQL Server и Sqlite при использовании несопоставленного типа в EF Core

Сообщение Anonymous »

У меня есть таблица, использующая стратегию TPH, которая сопоставляет множество производных типов с одной и той же таблицей (здесь нет ничего необычного).
Я использую несопоставленный тип (не объявленный в EDM) в сочетании с необработанным SQL (через SqlQuery) для SELECT свойств (столбцов) как из базового, так и из производных типов.
Сущности:

Код: Выделить всё

public class Base
{
public Guid Id { get; set; }
public DateTimeOffset Created { get; set; }
}

public class A : Base
{
public string AProperty { get; set; }
}

public class B : Base
{
public string BProperty { get; set; }
}
Несопоставленный тип:

Код: Выделить всё

public class Model
{
public Guid Id { get; set; }
public string AProperty { get; set; }
public string BProperty { get; set; }
public DateTimeOffset Created { get; set; }
}
Запрос:

Код: Выделить всё

var models = await context.Database.SqlQuery($"""
SELECT Id, AProperty, BProperty, Created FROM MyTable
""");
Когда я использую SQL Server, все работает нормально, без проблем.
Для наших модульных тестов мы используем SQLite; здесь начинаются мои проблемы.
Во-первых, SQLite не поддерживает DateTimeOffset, поэтому в нашем ApplicationDbContext у нас есть обходной путь с использованием DateTimeOffsetToBinaryConverter, когда Database.ProviderName — это Microsoft.EntityFrameworkCore.Sqlite в OnModelCreating.
Этот обходной путь отлично подходит для типов, определенных в EDM, но тип I определили для этого конкретного запроса () не определен в EDM, что означает, что обходной путь не используется.
Я попробовал переключить тип данных с DateTimeOffset на string в Model DTO, который на самом деле работал для SQLite, но не работает с SQL Server с недопустимым исключением приведения типов.
Такого также не наблюдается Я могу указать преобразователь для конкретного свойства с помощью аннотаций; похоже, что только свободная конфигурация может обеспечить это.
Что я могу здесь сделать? Я чувствую себя немного застрявшим..

Подробнее здесь: https://stackoverflow.com/questions/791 ... -when-usin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»