EFCore.MySql当模型遇到int[]怎么办

我使用的是Pomole.EntityFrameworkCore.MySqlmysql

须要将旧项目中的excels表转成实体,其中有一列是json格式的int[]sql

当遇到第一张表的时候,我使用了这样的方法来读取json

 public string InternalData { get; set; }
 private int[] _data;
 public double[] Data
 {
    get
    {
        if(_data == null)
        {
            _data = Array.ConvertAll(InternalData.Trim(new []{'[',']'}).Split(','), Double.Parse);   
        }
        return  _data;         
    }//主要是读取,并不涉及修改
 }    

可是当我遇到第二张表也是这个结构的时候,我以为多写这样一段代码,多一个属性的命名很讨厌,并且有误用的可能性。因此我只能另求他法。数组

因而我这样写:ui

class Primitive
{
    public int PrimitiveId { get; set; }
    public int Data { get; set; }

    [Required]
    public Reference ReferenceClass { get; set; }
}

class Reference
{
    public virtual List<Primitive> Data { get; set; }
}

也就是用外键关联另外一张表,就是感受只是一个int数组就加了张表关联,有点杀鸡牛刀的感受,并且读取的时候还要include一下。spa

但是当我打开第三张表,发现里面有多个int[]类型的字段的时候!我放弃了。。。excel

其实,EFCore2.1预览版有了一种方法来convert,大概像这样:code

    modelBuilder
        .Entity<MyEntity>()
        .Property(e => e.Data)
        .HasConversion(
            v => JsonConvert.SerializeObject(v),
            v => JsonConvert.DeserializeObject<int[]>(v));

不过我用的并非SQLServer,因此只能求助于Pomelo.EntityFrameworkCore.MySql,获得了这样的方法:blog

class Reference
{
    public JsonObject<int[]> Data1 { get; set; }
public JsonObject<int[]> Data2 { get; set; }
}

哈哈哈,so easy。get

不过这个json类型只支持mysql5.7+版本。

相关文章
相关标签/搜索