menu

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

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Menu>().OwnsOne(p => p.meta);
} //问题 主键ID不自增
id = table.Column<int>(type: "int", nullable: false)
//丢失
.Annotation("MySQL:ValueGenerationStrategy", MySQLValueGenerationStrategy.IdentityColumn),
//采用新的方法 属性 Json转对象
modelBuilder
.Entity<Menu>()
.Property(e => e.meta)
.HasConversion(
v => ObjectToJson(v), // 进入 Json转对象
v => JsonToObject<Meta>(v), //返回 Json转对象
new ValueComparer<Meta>(
(c1, c2) => ObjectToJson(c1) == ObjectToJson(c2),
c => c == null ? 0 : ObjectToJson(c).GetHashCode(),
c => c)
);
  /// <summary>
/// 对象转json
/// </summary>
/// <param name="obj">对象</param>
/// <returns></returns>
protected string ObjectToJson(object obj)
{
string result = null;
try
{
result = JsonSerializer.Serialize(obj); }
catch { } return result; } /// <summary>
/// 把Json文本转为实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="input"></param>
/// <returns></returns>
protected T JsonToObject<T>(string input)
{
try
{
return JsonSerializer.Deserialize<T>(input);
}
catch
{
return default(T);
}
}

EF OwnsOne 主键不自增的更多相关文章

  1. SqlServer 不是主键 如何自增

    SqlServer 不是主键 如何自增:INSERT INTO dbo.表 VALUES('14-19周',0,(select COUNT(1) from dbo.表)+1) (select COUN ...

  2. SQL语句获取数据库中的表主键,自增列,所有列

    SQL语句获取数据库中的表主键,自增列,所有列   获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...

  3. powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键

    转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...

  4. EF 实体字段设置主键和自增

    [Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int id { get; set; } ...

  5. 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段

    原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...

  6. SQL server 获得 表的主键,自增键

    主键: @tableName --表名 @id ---表对应的id SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSIN ...

  7. sqlserver修改主键为自增

    使用PowerDesigner创建一张表, 拷贝建表语句发现ID不是自增的, 以下是修改语句: ALTER TABLE USER_JOB_EXE_REC DROP COLUMN id; , ); 注: ...

  8. sql server sql查询数据库的表,字段,主键,自增,字段类型等信息

    1.查询数据表的属性(名称.说明.是否主键.数据类型.是否自增) SELECT t1.name columnName,case when t4.id is null then 'false' else ...

  9. SQL Server 2008设置主键为自增

    环境:SQL Server 2008 问题:设置主键,将主键设为自增. 解决:点击table->选中表->design->选中需要设置主键的字段,单击右键"设置主键&quo ...

  10. Mycat实战之主键数据库自增方式

    创建一个 person表,主键为Id,hash方式分片,主键自增(采用数据库方式) #person表结构如下 Id,主键,Mycat自增主键 name,字符串,16字节最长 school,毕业学校,数 ...

随机推荐

  1. twenty-three

    Vue(用于构建用户界面的前端框架) Vue框架的特性,主要有 ① 数据驱动试图 ②双向数据绑定 js数据的变化,会被自动渲染到页面上 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新 ...

  2. pip安装清华源

    一.更换PIP源PIP源在国外,速度慢,可以更换为国内源,以下是国内一些常用的PIP源. 豆瓣(douban) http://pypi.douban.com/simple/ (推荐)清华大学 http ...

  3. firewalld 防火墙centos7

    在centos7中iptables已经废弃不用 firewalld命令: 查看所有规则 firewall-cmd  --list-all 用命令行 来 允许40ip 访问本机 firewall-cmd ...

  4. k8s入门_label标签、nodeSelector

    什么是label Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node, RC(ReplicationController)/RS(ReplicaSet)等. ...

  5. nop 中创建任务(Task)

    NopCommerce 中Task 原理是服务端开启线程定时跑. 1.在数据表ScheduleTask中添加一条数据, 2.自定义类,继承ITask 即可 using Data.Log4Net; us ...

  6. android kotlin data class的公共参数解决

    kotlin的 data class 不能简略的继承 另一个 data class(要初始化对应父类的值) 尝试使用 sealed class 解决 sealed class CommonParams ...

  7. android studio 查看工程所有动画资源

  8. win10 python mysqlclient 安装问题 已解决

    用习惯了Linux   忽然换到win10 超级不习惯  今天下午就一个mysqlclient 安装弄了好长时间  ,最后发现是得改名  真是想爆粗口. 下面直接进入正题: 下载地址  https:/ ...

  9. maven 引入了jar包,但却不能使用jar包里类

    无报错,但是就是 无法 使用 lombok 的类. 发现classpath 里面也的确没有lombok jar包. 最后把json 的 version 属性加上 就正常了. 所以 结论: 不加vers ...

  10. CICD中一个巨头--jenkins

    持续化集成,发布离不开CICD,CICD中有最重要的一个程序就是jenkins,本章主要讲jenkins部署和建立项目任务 jenkins的出现,大大的提高了代码上线问题,通过图中可以看出,开发人员通 ...