Я использую несопоставленный тип (не объявленный в 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, но тип, который я определил для этого конкретного запроса (
Код: Выделить всё
ModelЯ пробовал переключить тип данных с DateTimeOffset на string в Model DTO, что на самом деле работало для SQLite, но не помогло с SQL Server с недопустимым исключением приведения типов.
Похоже, что я не могу указать преобразователь для определенного свойства через аннотации; похоже, что только свободная конфигурация может обеспечить это.
Что я могу здесь сделать? Я чувствую себя немного застрявшим..
Подробнее здесь: https://stackoverflow.com/questions/791 ... -when-usin
Мобильная версия