我第一次使用dapper进行集成测试中的一些小数据转换,并遇到映射主键字段的问题。
我尝试了带有和不带有[Key]属性的Entity属性(没有[Key] Dapper会引发异常,因为该实体上没有Id属性)。另外,下面的所有代码都可以很好地用于从数据库中查询数据,只有在使用Dapper更新时,才会出错。
我实体的相关部分如下:
[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