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,毕业学校,数 ...
随机推荐
- 【C++】关于智能指针的简单学习
智能指针 示例类: class String { private: string m_value; public: String(string str) :m_value(str) { cout &l ...
- 【python基础教程】-10.开箱即用(模块的工作原理,获悉模块的功能以及常用模块)
资料来源 (1) Python基础教程第三版 1.模块的工作原理 1.1 简单的模块及使用 1.1.1 模块的本质 (1) 模块就是程序,任何python程序都可以作为模块导入; 1.1.2 简单的模 ...
- rabbitMQ queue属性
Map<String, Object> args = new HashMap<String, Object>(); args.put("x-message-ttl&q ...
- k8s_使用k8s部署博客系统deployment(四)
mysql deployment 前面的nfs pv pvc secret configmap service等k8s对象已经创建好了,准备工作已经完成:现在可以开始准备deployment配置文件 ...
- Spark On Hive
配置 MySQL 通过官网下载并解压: tar -zxvf mysql-8.0.31-el7-x86_64.tar.gz -C /usr/local 重命名: mv mysql-8.0.28-el7- ...
- Visual Studio NuGet的地址(记录)
NuGet源地址 : https://nuget.org/api/v2/ https://api.nuget.org/v3/index.json (推荐)
- spring-boot 引入redis
1.引入redis <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- P1067 [NOIP2009 普及组] 多项式输出 题解
目录 题目 要注意的地方 code 题目 P1067 [NOIP2009 普及组] 多项式输出 要注意的地方 是不是常数项 是不是1 或 -1 输入的是不是第一个 ^1 负数 code #includ ...
- CF850F 题解
题意 传送门 有一袋 \(n\) 个颜色球,第 \(i\) 个颜色的球有 \(a_i\) 个. 当袋子里至少有两个不同颜色的球时,执行以下步骤: 一个接一个的按照顺序随机取出两个的球,这些球的颜色可能 ...
- golang基本数据类型
1.整形 默认整数类型为int 变量在选择时应遵循最小化原则 1.1 有符号(int) 类型 取值范围 占用空间(字节) int8 -2^7到 2^7-1 (-128到127) 1 int16 -2^ ...