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+版本。

相關文章
相關標籤/搜索