Субъекты Service Fabric используются для доступа к базе данных, и все методы предполагают использование Dapper в качестве инструмента ORM.
Одна вещь, которую я обнаружил, лучший способ решить текущую проблему — это использовать что-то под названием SqlMapper в Dapper. При этом вы можете определить общее поведение при обработке определенных типов данных, например:
SqlMapper.AddTypeHandler(new DateTimeHandler());
public class DateTimeHandler : SqlMapper.TypeHandler<DateTime>
{
public override void SetValue(IDbDataParameter parameter, DateTime dateTime)
{
parameter.Value = dateTime.ValidateDateTime();
}
public override DateTime Parse(object value)
{
return ((DateTime)value).ValidateDateTime();
}
}
Поскольку вы объявляете статический метод выше (AddTypeHandler) с настраиваемым обработчиком, таким как DateTimeHandler, сопоставление, выполненное с использованием платформы Dapper, гарантирует, что любой тип dateTime проходит через вышеуказанный обработчик правильно.
Я бы хотел, чтобы это происходило, когда каждый Актер общается с базой данных через Dapper. Я еще не видел, чтобы это происходило при объявлении вышеуказанного статического метода в попытках с несколькими разными местами, такими как конструктор Actor() или основной метод, такой как ниже:
private static void Main()
{
try
{
// This line registers an Actor Service to host your actor class with the Service Fabric runtime.
// The contents of your ServiceManifest.xml and ApplicationManifest.xml files
// are automatically populated when you build this project.
// For more information, see https://aka.ms/servicefabricactorsplatform
ActorRuntime.RegisterActorAsync<SqlRepositoryActor>(
(context, actorType) => new ActorService(context, actorType)).GetAwaiter().GetResult();
// This doesn't seem like a right place as I don't see the handler being called when Actor uses dapper mapping methods.
SqlMapper.AddTypeHandler(new DateTimeHandler());
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
ActorEventSource.Current.ActorHostInitializationFailed(e.ToString());
throw;
}
}