我使用的是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+版本。