【发布时间】:2020-06-05 15:35:17
【问题描述】:
我有一个 MySql 数据库,其中包含 Id int 和 Name:json
地点表示例
Id Name
1 {"en":"Sphinx","ar":"أبو الهول","fr":"Le sphinx"}
C# Place 类
public class Place
{
[Key, Column("id")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
}
我正在与 EntityFramework 6 连接,连接成功并检索这样的数据
{Id = 1, Name = "{\"en\":\"Sphinx\", \"ar\":\"أبو الهول\", \"fr\":\"Le sphinx\"} " }
我想要如何将名称映射到 new Object 而不是 JSON string
类似的东西
放置类
public class Place
{
[Key, Column("id")]
public int Id { get; set; }
[Column("name")]
public Localized<string> Name { get; set; }
}
本地化类
public class Localized<T>
{
public T en { get; set; } // english localization
public T ar { get; set; } // arabic localization
public T fr { get; set; } // french localization
}
当我这样做时,
Name属性带有NULL值
存储库中的代码
using (var context = new PlacesEntityModel())
{
return context.Places.Take(5).ToList();
}
我不想使用AutoMapper,
我希望 EntityFramework 中的某些内容在 数据库级别 中仅选择 一种语言,而不获取所有其他数据然后对其进行映射
如何解决这个问题?
【问题讨论】:
-
不确定这会有多大帮助,但请查看此处的声明 docs.microsoft.com/en-us/archive/msdn-magazine/2017/april/…
-
赏金只针对一种语言 :)
-
您可以使用 MySql 内联查询
" SELECT name->'$.ar' FROM places "执行此操作,这将访问 JSON 路径并仅从 JSON 对象返回属性ar -
这可能是因为该库能够构建该功能。您需要弄清楚他们做了什么(逆向工程)
标签: c# mysql asp.net-mvc entity-framework asp.net-web-api