zoukankan      html  css  js  c++  java
  • 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+版本。

  • 相关阅读:
    汉字词组换行
    C#中获取Excel文件的第一个表名
    SQL查找某一条记录的方法
    C#数据库连接字符大全
    整理的asp.net资料!(不得不收藏)
    母版页的优点,及母版页与内容页中相互访问方法
    13范式
    使用 Jackson 树连接线形状
    word2007,取消显示回车符
    三张表之间相互的多对多关系
  • 原文地址:https://www.cnblogs.com/pasoraku/p/8599810.html
Copyright © 2011-2022 走看看