Я впервые использую dapper для некоторых небольших преобразований данных в интеграционных тестах и столкнулся с проблемой сопоставления поля первичного ключа.
Я пробовал свойство Entity с и безАтрибут [Key] (без [Key] Dapper выдает исключение, потому что у сущности нет свойства Id).Кроме того, весь приведенный ниже код прекрасно работает для запроса данных из БД, только когда происходит обновление с использованием Dapper.Contrib, все идет не так.
Соответствующие части моей сущности выглядят следующим образом:
[Table("subscription")]
public class SubscriptionConfiguration
{
[Key]
public int SubscriptionId { get; set; }
}
Соответствующая часть моей карты Dapper.FluentMap выглядит следующим образом:
public class SubscriptionConfigurationMap :
EntityMap<SubscriptionConfiguration>
{
public SubscriptionConfigurationMap()
{
Map(config => config.SubscriptionId).ToColumn("subscription_id");
}
}
Соответствующая часть моего кода доступа к данным:
public async Task<bool> SaveAsync(SubscriptionConfiguration subscription)
{
using (var connection = new MySqlConnection(this.ConnectionString))
{
await connection.OpenAsync();
return connection.Update(subscription);
}
}
И моя карта регистрации:
FluentMapper.Initialize(config => {
config.AddMap(new SubscriptionConfigurationMap());
});
Я ожидал бы, что соответствующая строка моей таблицы будет обновлена, но вместо этого я получаю исключение MySQL, что предложение where
ссылается на столбец SubscriptionId
, который не существует (что правильно, так какв моем отображении отображается имя столбца subscription_id