EF OwnsOne 主键不自增
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 主键不自增的更多相关文章
- SqlServer 不是主键 如何自增
SqlServer 不是主键 如何自增:INSERT INTO dbo.表 VALUES('14-19周',0,(select COUNT(1) from dbo.表)+1) (select COUN ...
- SQL语句获取数据库中的表主键,自增列,所有列
SQL语句获取数据库中的表主键,自增列,所有列 获取表主键 1:SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_U ...
- powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键
转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...
- EF 实体字段设置主键和自增
[Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int id { get; set; } ...
- 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段
原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...
- SQL server 获得 表的主键,自增键
主键: @tableName --表名 @id ---表对应的id SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSIN ...
- sqlserver修改主键为自增
使用PowerDesigner创建一张表, 拷贝建表语句发现ID不是自增的, 以下是修改语句: ALTER TABLE USER_JOB_EXE_REC DROP COLUMN id; , ); 注: ...
- sql server sql查询数据库的表,字段,主键,自增,字段类型等信息
1.查询数据表的属性(名称.说明.是否主键.数据类型.是否自增) SELECT t1.name columnName,case when t4.id is null then 'false' else ...
- SQL Server 2008设置主键为自增
环境:SQL Server 2008 问题:设置主键,将主键设为自增. 解决:点击table->选中表->design->选中需要设置主键的字段,单击右键"设置主键&quo ...
- Mycat实战之主键数据库自增方式
创建一个 person表,主键为Id,hash方式分片,主键自增(采用数据库方式) #person表结构如下 Id,主键,Mycat自增主键 name,字符串,16字节最长 school,毕业学校,数 ...
随机推荐
- SQLSERVER自动备份数据库
1. 通过操作系统的定时任务执行 创建两个文件,auto.bat和auto.sql,使用bat调用sql文件中的代码段 auto.bat内容 sqlcmd -S localhost,2433 -U s ...
- win10安装MAT并单独配置jdk11
1.下载MAT 2.下载jdk11 3.配置jdk11 MAT解压后,在MemoryAnalyzer.ini配置文件开头添加配置指向jdk11,如下: -vm C:\Program Files\Jav ...
- ESP32-IDF 在vscode环境搭建
前言 由于许多的未知原因,我尝试过许多网上教程,在vscode上搭建ESP-IDF环境,但结果是耗费了大把时间,结果还非常不理想. 在参考了(一)esp32开发环境搭建(VSCode+IDF实现单步调 ...
- STP协议-进阶
一 STP的选举规则1.在交换网络中选举一个根桥(Root Bridge)比较Bridge ID桥ID(优先级+MAC地址)越小越优 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交 ...
- Vue源码主体分析
vue的响应式和react的函数式编程思想是很不同的. vue最基本的原理是对getter和setter的代理模式.以及观察者模式. 当数据发生变化时,通知观察者. 而watcher是通过触发数据的g ...
- 如何修改vagrant系统的root用户密码
1. 先使用vagrant 用户登录. 2. $sudo passwd root #按照提示输入两次新的密码,并加以确认. 然后就可以修改root用户密码
- 读取本地xml或json等本地文件报错Failed to load file:///D:/xml/test.xml: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
问题如上图: 原因及解析:在浏览器打开本地的html文件, 上面proxy中的url获取的就是一个本地文件, 协议是file://,如果是在服务器启动的话,则使用的是http或者https协议.出于安 ...
- Typora+PicGo+GitHub
图片可以成功上传github,但是picgo相册无法预览,typora里也加载不出 image load failed 方法: 在`C:\Windows\System32\drivers\etc\ho ...
- 基础篇之DOS命令
对于编程的小朋友来说,在DOS中输入一些命令也是常有的事情. 今天就来学习一些常见的命令.[该篇是在B站学习Siki学院的课程时做的笔记] DOS命令目录操作 常用DOS命令(输入命令后按下回车) d ...
- 备份是个好习惯 bugku
题目描述: 解题思路: 1.查看网页源码只显示一行字符,有点像16进制,但经过解码并不是,也不是base64等编码 2.根据题目,应该和备份相关,默认页面一般都是 index.php或者index ...