Я пытаюсь настроить Dapper для извлечения данных из базы данных MySQL в мою модель в приложении C#. Три столбца результатов запроса относятся к типу JSON (это: toaddress, ccaddress, params). Ниже вы можете увидеть результаты запроса.
Моя модель:
namespace LegacyWorkDataAccess.Models
{
public class AdvancedNotificationOfArrivalSent
{
public int ID { get; set; }
public string NotificationType { get; set; }
public string HBL { get; set; }
public bool Sent { get; set; }
public DateTime When { get; set; } = new DateTime();
public List<string> ToAddresses { get; set; } = new List<string>();
public List<string> CcAddresses { get; set; } = new List<string>();
public EmailParams Params { get; set; } = new EmailParams();
public string EntryOverview
{
get { return $"{ID}: {HBL}, sent ({Sent}) on {When}"; }
}
}
}
Моя mapper:
namespace LegacyWorkDataAccess.Mappers
{
internal class AdvancedNotificationOfArrivalSentMap : EntityMap<Models.AdvancedNotificationOfArrivalSent>
{
public AdvancedNotificationOfArrivalSentMap()
{
SqlMapper.AddTypeHandler(typeof(Models.EmailParams), new Handlers.JsonParamsHandler());
SqlMapper.AddTypeHandler(typeof(List<string>), new Handlers.JsonEmailsHandler());
Map(x => x.ID).ToColumn("id");
Map(x => x.NotificationType).ToColumn("notificationtype");
Map(x => x.HBL).ToColumn("hbl");
Map(x => x.Sent).ToColumn("sent");
Map(x => x.When).ToColumn("when");
Map(x => x.ToAddresses).ToColumn("toaddress");
Map(x => x.CcAddresses).ToColumn("ccaddress");
Map(x => x.Params).ToColumn("params");
}
}
}
Электронная почта JSON обработчик
namespace LegacyWorkDataAccess.Handlers
{
public class JsonEmailsHandler : SqlMapper.ITypeHandler
{
public void SetValue(IDbDataParameter parameter, object value)
{
parameter.Value = JsonConvert.SerializeObject(value);
}
public object Parse(Type destinationType, object value)
{
var emailsJson = (string)value;
var output = JsonConvert.DeserializeObject<List<string>>(emailsJson);
return output;
}
}
}
Как я пытаюсь получить данные из базы данных
using (var db = new MySqlConnection(ConnectionString))
{
FluentMapper.EntityMaps.TryAdd(typeof(Mappers.AdvancedNotificationOfArrivalSentMap), new Mappers.AdvancedNotificationOfArrivalSentMap());
List<Models.AdvancedNotificationOfArrivalSent> output = db.Query<Models.AdvancedNotificationOfArrivalSent>($"CALL getfclsentbydaterange(\"{dateStart}\", \"{dateEnd}\");").ToList();
return output;
}
Данные, которые фактически доступны в модели:
Свойство Params заполняется правильно со всеми данными, но ToAddresses и CcAddresses пустые. Я добавил несколько точек останова внутри обработчика Email JSON, и похоже, что обработчик никогда не запускается (в то время как обработчик параметров запускается без проблем), поэтому держу пари, что моя проблема находится в классе Mapper, однако я не могу понять, что Я поступил неправильно. Буду признателен за каждое предложение, заранее спасибо.