我有一个带有列的 MySql 数据库 Id
int 和 Name
:json
位置表样本
Id Name
1 {"en":"Sphinx","ar":"أبو الهول","fr":"Le sphinx"}
C#地方类
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
像这样的东西
地点类(class)
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
}
when I do this
Name
property come withNULL
value
存储库中的代码
using (var context = new PlacesEntityModel())
{
return context.Places.Take(5).ToList();
}
我不想用
AutoMapper
,我希望 EntityFramework 中的某些内容仅选择 一种语言在 数据库级 无需获取所有其他数据,然后将其映射
如何解决这个问题?
最佳答案
您可以尝试扩展方法从您的实体类型映射。
public class Place
{
[Key, Column("id")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
}
public class PlaceDTO
{
[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
}
扩展方法 ToDto
public static class Extensions
{
public static PlaceDTO ToDto(this Place place)
{
if (place != null)
{
return new PlaceDTO
{
Id = place.Id,
Name = JsonConvert.DeserializeObject<Localized<string>>(place.Name)
};
}
return null;
}
}
用法 var place = new Place() { Id = 1, Name = "{\"en\":\"Sphinx\", \"ar\":\"أبو الهول\", \"fr\":\"Le sphinx\"}" };
var placeDTO = place.ToDto();
Console.WriteLine($"{placeDTO.Id}-{placeDTO.Name.ar}-{placeDTO.Name.en}-{placeDTO.Name.fr}");
关于c# - 将 JSON 列从 MySql 数据库映射到来自 Web Api 的 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60334688/