EF OwnsOne 主键不自增


menu

  public class Menu
    {   /// 
        /// id
        /// 
        [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), JsonIgnore]
        public int id { set; get; }
        /// 
        /// 名称
        /// 
        [MaxLength(100), Required]
        public string name { set; get; }
   /// 
        /// 属性
        /// 
        public virtual Meta meta{ get; set; }
}
meta

  public class Meta
    { 
        /// 
        /// 名称
        /// 
        [MaxLength(150), Required]
        public string title { set; get; }
        /// 
        /// 图标
        /// 
        [MaxLength(150)]
        public string icon { set; get; }
        /// 
        /// 隐藏
        /// 
        public bool? hidden { set; get; }
}
//EF  [Owned] 已拥有

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().OwnsOne(p => p.meta);
}

//问题 主键ID不自增
id = table.Column<int>(type: "int", nullable: false)
 //丢失
.Annotation("MySQL:ValueGenerationStrategy", MySQLValueGenerationStrategy.IdentityColumn),
//采用新的方法 属性 Json转对象
            modelBuilder
                .Entity() 
                   .Property(e => e.meta)
                    .HasConversion(
                        v => ObjectToJson(v), // 进入 Json转对象
                        v => JsonToObject(v), //返回 Json转对象
                        new ValueComparer(
                        (c1, c2) => ObjectToJson(c1) == ObjectToJson(c2),
                        c => c == null ? 0 : ObjectToJson(c).GetHashCode(),
                        c => c)
                        );
  /// 
        /// 对象转json
        /// 
        /// 对象
        /// 
        protected string ObjectToJson(object obj)
        {
            string result = null;
            try
            {
                result = JsonSerializer.Serialize(obj);


            }
            catch { }

            return result;

        }


        /// 
        /// 把Json文本转为实体
        /// 
        /// 
        /// 
        /// 
        protected T JsonToObject(string input)
        {
            try
            {
                return JsonSerializer.Deserialize(input);
            }
            catch
            {
                return default(T);
            }
        }