CustomTypeHandler, кажется, не работает правильно
У меня есть такой объект:
[Table("Entity", Schema = "dbo")]
internal class Entity
{
[Key]
public virtual int Id { get; set; }
public virtual CustomType Filters { get; set; }
public virtual string Name { get; set; }
...
}
и пользовательский тип, как это:
[JsonObject]
public class CustomType
{
[JsonProperty(PropertyName = "a")]public string a{ get; set; }
[JsonProperty(PropertyName = "b")]public string b { get; set; }
[JsonProperty(PropertyName = "d")]public IReadOnlyCollection<AnotherType> d{ get; set; }
}
пользовательский обработчик, как это:
public class JsonTypeHandler<CustomType> : SqlMapper.TypeHandler<CustomType>
{
public override void SetValue(IDbDataParameter parameter, CustomType value)
{
parameter.Value = value == null
? (object) DBNull.Value
: JsonConvert.SerializeObject(value);
parameter.DbType = DbType.String;
}
public override CustomType Parse(object value)
{
return JsonConvert.DeserializeObject<CustomType>(value.ToString());
}
}
и я register
это в global.asax.cs вот так:
SqlMapper.AddTypeHandler(new JsonTypeHandler<CustomType>());
Проблема в том, что SetValue
не вызывается при вызове Execute. Я использую Dapper.FastCrud, и мой код для вставки сущности в БД выглядит так:
var entity = new Entity
{
Filters = new CustomType {...},
Name = "fafsd",
...
};
_dbConnection.Insert(dataExtractEntry, x => x.AttachToTransaction(tx));
Есть ли что-то еще, что я должен сделать здесь, или, может быть, я что-то упустил?