Проблема в том, что в SQL есть хранимая процедура со столбцами snake_case, а на стороне c # у меня есть модель с ~ 70 + столбцами и именами свойств CamelCase.
public void EditProfileSettings(ProfileSettingsEdit profileSettings)
{
using (SqlConnection sqlConnection = InitializeSqlConnection(_config.DataExportApplication))
{
DefaultTypeMap.MatchNamesWithUnderscores = true;
sqlConnection.Query<ProfileSettingsEdit>(
"usp_profilesettings_update",
profileSettings,
commandType: CommandType.StoredProcedure);
}
}
Я знаю, что это может быть дубликат, но ничего похожегоЯ нашел сработавшим для меня .. Я считаю, что пользовательские картографы могут решить эту проблему, но возможно ли это решить без написания правила для каждого свойства.?
Быстрое решение:
Ну, пока я могу с этим смириться:
public void EditProfileSettings(ProfileSettingsEdit profileSettings)
{
using (SqlConnection sqlConnection = InitializeSqlConnection(_config.DataExportApplication))
{
var parameters = new DynamicParameters();
var props = profileSettings.GetType().GetProperties();
for (int i = 0; i < props.Length; i++)
{
parameters.Add(props[i].Name.ToUnderscoreCase(), props[i].GetValue(profileSettings));
}
sqlConnection.Query<ProfileSettingsEdit>(
"usp_profilesettings_update",
parameters,
commandType: CommandType.StoredProcedure);
}
}
public static class ExtensionMethods
{
public static string ToUnderscoreCase(this string str)
{
return string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower();
}
}
Не уверен, насколько быстрым будет быстродействие ... но если кто-то может прийтичто-нибудь получше, пожалуйста, не стесняйтесь мне помочь