Я использую несопоставленный тип (не объявленный в 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
""");
Для наших модульных тестов мы используем SQLite; здесь начинаются мои проблемы.
Во-первых, SQLite не поддерживает DateTimeOffset, поэтому в нашем ApplicationDbContext у нас есть обходной путь с использованием DateTimeOffsetToBinaryConverter, когда Database.ProviderName — это Microsoft.EntityFrameworkCore.Sqlite в OnModelCreating.
Этот обходной путь отлично подходит для типов, определенных в EDM, но тип I определили для этого конкретного запроса (
Код: Выделить всё
Model
Я попробовал переключить тип данных с DateTimeOffset на string в Model DTO, который на самом деле работал для SQLite, но не работает с SQL Server с недопустимым исключением приведения типов.
Такого также не наблюдается Я могу указать преобразователь для конкретного свойства с помощью аннотаций; похоже, что только свободная конфигурация может обеспечить это.
Что я могу здесь сделать? Я чувствую себя немного застрявшим..
Подробнее здесь: https://stackoverflow.com/questions/791 ... -when-usin