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,毕业学校,数 ...
随机推荐
- 全国IP段列表
http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest Linux下执行如下命令可将中国大陆ip格式化并导出 wget -c htt ...
- 小程序调用OCR识别操作的过程,特此记录。
bu废话,直接记录.(注:我用的是云调用!!!) 对于大家首次使用该操作时,推荐两位大佬的文章,大家完全可以看两位大佬的文章,一步一步来就可以实现. 第一个文章呢,先看这个 https://blog. ...
- Django ImageField 内置属性height,width和size
ImageField实例使用height,width和size属性后,若后继操作需重新打开实例,其他模块方法才能调用实例,使用open()方法:>>> from PIL import ...
- Mybatis开发之mapper代理实现自定义接口(常用)
Mybatis开发之mapper代理实现自定义接口(常用) 通过mapper代理实现自定义接口 自定义接口,接口里面定义定义相关的业务方法 编写方法相对应的Mapper.xml. 定义完接口后,Map ...
- Spring MVC文件上传下载
Spring MVC文件上传下载 单文件上传 底层是使用Apache fileupload 组件完成上传,Spring MVC对这种方式进行封装. pom.xml <dependency> ...
- Mac上安装Python并配置环境变量
1.下载安装包. 官网下载地址: Download Python | Python.org 2.安装 直接双击安装包,按照默认提示步骤进行安装就行. 3.配置 python 和 pip 命令环境变量 ...
- tapdata问题
聚合节点写两个不同的聚合函数,只需要在关联目标节点的目标字段中添加上分组字段,其他字段不用做关联 聚合节点写两个相同的聚合函数,只需要在关联目标节点的目标字段中左右两边都添加上_id,会输出两条数据, ...
- 安装gitlab的总结
安装过程参考文档 http://www.linuxe.cn/post-520.html https://www.bilibili.com/read/cv4602641 备注要点: 1.gitlab安装 ...
- unity 调试 packages
package中代码vs无法f12跳转 解决方法 1 把包copy出来 2 Package Manager->Add package from disk 3 选择包文件中的package.jso ...
- redis+token实现一个账号只能一个人登录
自己在闲着没事的时候,突然想到了这么一个小功能,于是决定练习一下,首先想到的是如果一个账号只能一个人登录,可能会出现两个情况,一种是后登录者把前者的账号顶替掉,还有一种就是后者登录的时候会有提示当前账 ...