我想在SQL服务器中存储一个c#对象。我想到了以下几个选项:
在sql列中存储C#对象的最佳做法是什么?为什么? 我正在使用SQL 2014,所以我认为选项3是最好的?
编辑: 注意:它不是要查询的数据,我只想加载一个已缓存到内存中的c#对象的对象。并在c#中执行一些逻辑。从另一个数据库获取数据只需要一段时间,因此我将所有数据保存在自定义对象中。因此,我认为我不应该使用ORM
答案 0 :(得分:1)
如果只是为了在某个数据库中稍后用密钥读回数据库,那么请使用(2)并使用nvarchar(max)字段类型。
如果要查询的数据,那么您应该设计一个匹配并使用ORM的模式。
答案 1 :(得分:0)
如果你对选项B更加肯定,那么你可以将sql server中任何对象[或数据类型]的json序列化字符串存储为NVARCHAR(MAX)字段。
当您想要阅读它时,您可以轻松地以原始格式反序列化该字符串。
e.g。
Demo d1=new Demo();
//store this json into database.
string json= JsonConvert.SerializeObject(d);
// Now while reading fron db
Demo d2= JsonConvert.DeserializeObject<Demo>(json);
答案 2 :(得分:0)
我会选择JSON序列化,它只是文本,因此在存储诸如“用户配置文件设置”或其他类型的结构数据之类的内容时,您可以阅读和编写任何语言的JSON。现在SQL服务器也已经理解了这一点,就像8到10年前大肆宣传的XML支持一样,现在可以为那些需要更新数据的人提供大量TSQL支持的JSON,比如当你需要修复所有数据时所有用户的更新......
无论如何,请看一下这篇文章。 JSON in SQL Server 2016-2017 当往返于JSON时,您应该测试您的属性,因为某些数据类型可能无法前后转换,具体取决于区域特定设置(如日期和小数值)。