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

我使用的是Pomole.EntityFrameworkCore.MySql

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

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

 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;         
    }//主要是读取,并不涉及修改
 }    

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

于是我这样写:

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一下。

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

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

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

不过我用的并不是SQLServer,所以只能求助于Pomelo.EntityFrameworkCore.MySql,得到了这样的方法:

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

哈哈哈,so easy。

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

 

posted @ 2018-03-19 09:51  陈惊蛰  阅读(718)  评论(0编辑  收藏  举报