EF Code First - 将字典或自定义类型映射为nvarchar

Mar*_*nHN 7 entity-framework ef-code-first

我想首先使用EF代码用于我正在使用带有存储过程的普通旧ADO.NET访问的数据库.

在我的数据库中,我有一些nvarchar(MAX)列应该映射到a和Dictionary<string, string>.

保存到数据库时,它是XML格式的字符串.我使用这种技术来允许例如在线商店中的产品名称的国际化.我不知道任何给定用户想要翻译多少种语言,所以我不能Name为每种语言提供一列.

我还想避免将值存储在一个单独的表中,所以我最终得到了Dictionary - XML方法.

我现在这样做的方法是,每当我与数据库交互时,只将这些列中的任何一个视为字符串.我有一个自定义映射器函数,可以将XML转换为字典,然后返回到XML.

但我似乎无法首先找到使用EF Code执行此操作的方法?有任何想法吗?

Wou*_*ort 14

您可以添加一个属性,该属性将返回您Dictionary<,>的XML字符串,然后删除您的Dictionary<,>属性的映射.

    [NotMapped]
    public Dictionary<string,string> MyDictionary
    {
     get; set;
    }

    public string DictionaryAsXml
    {
        get
        {
             return ToXml(MyDictionary);
        }
        set
        {
           MyDictionary = FromXml(value);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果您不想公开您的DictionaryAsXml财产,请查看此博客文章.它显示了如何持久保存私有和受保护的属性.

  • @Piou我不记得五年前我在想什么,但我想我还习惯使用XML然后再使用JSON.我确实假设该示例也适用于JSON,所以请随意尝试.但请记住,过早优化是万恶之源. (2认同)