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));

Есть ли что-то еще, что я должен сделать здесь, или, может быть, я что-то упустил?

0 ответов

Другие вопросы по тегам