gpt4 book ai didi

c# - 使用 dapper 并将一列映射到 json

转载 作者:行者123 更新时间:2023-11-30 20:31:07 24 4
gpt4 key购买 nike

我有一张表,其中我将字典作为 json 存储在一列中。在将内容保存到数据库或从数据库加载内容时,我希望能够尽可能使 json 反序列化不可见。是否可以以某种方式使用 dapper 执行此操作,而无需使用包含 json 表示的 Foo 中的另一个属性?

// where someData is the dictionary column
void Save(IDbConnection conn, Foo foo){
conn.Execute("INSERT INTO foos (name, <othercols...>, someData) VALUES (@Name, <othercols...>, @SomeData, foo);
}

我可以手动将 Foo 映射到一个新的动态对象中,但是由于还有其他列会很乏味,所以我想知道是否还有其他方法?

最佳答案

您可以通过实现 ITypeHandler 来实现它。

Dictionary<int, string> 的实现示例:

class DictTypeHandler : ITypeHandler
{
public object Parse(Type destinationType, object value)
{
return JsonConvert.DeserializeObject<Dictionary<int, string>>(value.ToString());
}

public void SetValue(IDbDataParameter parameter, object value)
{
parameter.Value = (value == null)
? (object)DBNull.Value
: JsonConvert.SerializeObject(value);
parameter.DbType = DbType.String;
}
}

如果您使用 SqlMapper.AddTypeHandler(typeof(DictTypeHandler), new DictTypeHandler()) 将它添加到已知的处理程序中,Dapper 将使用该处理程序

注意设置 IDbDataParameter.DbType如果您的 sql 列是 varchar(max),则为字符串,否则 Dapper 将使用不能转换为 varchar(max) 的 sql_variant。

如果您通过存储库模式实现持久性,您可以添加 AddTypeHandler代码到构造函数中。

关于c# - 使用 dapper 并将一列映射到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com