我使用的是Pomole.EntityFrameworkCore.MySql 需要將舊項目中的excels表轉成實體,其中有一列是json格式的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+版本。