我想首先将EF代码用于我正在使用带有存储过程的普通旧ADO.NET访问的数据库。
在我的数据库中,我有一些nvarchar(MAX)
列应该与Dictionary<string, string>
进行映射。
保存到数据库时,它是XML格式的字符串。我使用这种技术来实现例如国际化。在线商店中的产品名称。我不知道任何给定用户想要翻译的语言数量,因此我不能为每种语言添加Name
列。
我还想避免将值存储在一个单独的表中,所以我最终得到了Dictionary - XML方法。
我现在的做法是,每当我与数据库交互时,只将这些列中的任何一个视为字符串。我有一个自定义映射器函数,可以将XML转换为字典,然后再转换为XML。
但我似乎无法首先找到使用EF Code执行此操作的方法?有什么想法吗?
答案 0 :(得分:13)
您可以添加一个属性,将Dictionary<,>
作为XML字符串返回,然后删除Dictionary<,>
属性的映射。
[NotMapped]
public Dictionary<string,string> MyDictionary
{
get; set;
}
public string DictionaryAsXml
{
get
{
return ToXml(MyDictionary);
}
set
{
MyDictionary = FromXml(value);
}
}
如果您不想公开DictionaryAsXml
财产,请查看this blog post。它显示了如何持久保存私有和受保护的属性。
答案 1 :(得分:3)
我在VB.NET中进行xml转换时遇到了一些困难。因此,我利用newtonsoft.json将字典序列化为JSON字符串并返回。
Public Property JsonDict As String
Get
If MyDict Is Nothing Then
Return Nothing
Else
Return JsonConvert.SerializeObject(MyDict)
End If
End Get
Set(value As String)
If value Is Nothing Then
MyDict = Nothing
Else
MyDict = JsonConvert.DeserializeObject(Of Dictionary(Of Single, Single))(value)
End If
End Set
End Property
<NotMapped>
Public Property MyDict As Dictionary(Of Single, Single)