C# EF Core 后端代码已定义的用户实体,如何扩展字段?
注:“2020中国.NET开发者大会”上学习到的开发技巧, 记录下来
1.问题
后端代码已定义的用户实体,如下:
public class UserEntity
{
public Guid UserId {get; set;}
public string UserName {get; set;}
public string Password {get; set;}
}
现在需求是在不改变实体类结构代码的情况下, 对该实体新增一个Gender
字段, 如何做呢?
2.解决方案
利用
EF Core
的索引属性;
实体上可以不定义字段;
字段数据存储在字典中;
2.1 定义基类
public abstract class BaseEntity
{
private Dictionary<string, object> _values = new Dictionary<string, object>();
//动态创建字段
public object this[string key]
{
get
{
if(_values.TryGetValue(key, out var value))
return value;
return null;
}
set => _values[key] = value;
}
}
2.2 继承
public class UserEntity : BaseEntity
{
public Guid UserId {get; set;}
public string UserName {get; set;}
public string Password {get; set;}
}
2.3 在DbContex中定义扩展字段
public class TestDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder. Entity<UserEntity>(entity =>
{
entity.IndexerProperty<string>("Gender")//定义"性别"字段信息
.HasMaxLength(64);
});
}
}
2.4 使用
Using(TestDbContext dbContext= new TestDbContext())
{
var userEntity = new UserEntity();
userEntity.UserName = "admin";
userEntity.Password = "123";
userEntity["Gender"] = "男";
dbContext.Set<UserEntity>().Add(userEntity);
dbContext.SaveChanges();
}
C# EF Core 后端代码已定义的用户实体,如何扩展字段?的更多相关文章
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- EF获取DbContext中已注册的所有实体类型
/// <summary> /// 获取DbContext中已注册的实体类型 /// </summary> /// <typeparam name="T&quo ...
- 深入理解 EF Core:EF Core 写入数据时发生了什么?
阅读本文大概需要 14 分钟. 原文:https://bit.ly/2C67m1C 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- EF Core 快速上手——EF Core的三种主要关系类型
系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询 本 ...
- EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery
一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文 ...
- 如何在EF Core 使用存储过程
使用EF Core框架能快速的帮助我们进行常规的数据处理和项目开发,但是ORM虽然好用,但是在许多复杂逻辑的数据处理时,我个人还是偏向用SQL和存储过程的方式去处理,但是研究了一下目前最新版本的EF ...
- EF Core 2.1 中的 Eager loading、Explicit loading和LazyLoading (转自MSDN)
Entity Framework Core allows you to use the navigation properties in your model to load related enti ...
- 【ASP.NET Core快速入门】(十三)Individual authentication 模板、EF Core Migration
Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...
- 菜鸟入门【ASP.NET Core】13:Individual authentication 模板、EF Core Migration
Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...
- EF Core 中DbContext不会跟踪聚合方法和Join方法返回的结果,及FromSql方法使用讲解
EF Core中: 如果调用Queryable.Count等聚合方法,不会导致DbContext跟踪(track)任何实体. 此外调用Queryable.Join方法返回的匿名类型也不会被DbCont ...
随机推荐
- spring boot整合maybatis plus 的 文件生成代码
/** * 代码生成 */public class AutoGenerator_ { public static void main(String[] args) { AutoGenerator ge ...
- 多线程池Flask实战应用
多线程池Flask实战应用 import json import time import flask from concurrent.futures import ThreadPoolExecutor ...
- 一个简单demo展示应用接口使用goroutine优雅退出
package main import ( "context" "errors" "log" "net/http" &q ...
- IMX6ULL基本环境搭建
基本环境搭建 1 交叉编译工具 在虚拟机中安装交叉编译工具,为后续开发做准备. 1.1 工具版本 工具版本:Linaro Releases 当前虚拟机为64位系统,因此下载64位系统的工具: $ un ...
- 使用python获取房价信息
从贝壳网获取房价信息. 基本的步骤和我的这篇博文一样:https://www.cnblogs.com/mrlayfolk/p/12319414.html.不熟悉的可参考一下. 下面的代码是获取3000 ...
- cookie cookie的获取
什么是 cookie cookie 是 浏览器 的 一种功能 是 浏览器 用来 存储 前端数据的一种 存储机制 ...
- 使用线程池实现为多个客户端提供Echo服务
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; im ...
- Windows下cmd命令行ssh连接Linux服务器
1.window+R键进入运行 2.输入cmd,运行命令行工具 3.使用,命令ssh连接服务器 ssh -t 用户名@ip地址 -p 22 例如: 输入密码,显示连接成功
- P2868
Sightseeing Cows G 我们先考虑如何求平均乐趣值. 1.总乐趣为 \(\sum^n_{i = 1}f_i \times s_i\),其中 \(f_i\) 为第 \(i\) 个点的乐趣值 ...
- markdown折叠展开代码
背景 有的时候,我们的代码太多,直接用cout<<"hello";很不方便. 我们可以将代码折叠. 效果 代码 普通代码折叠 <details> <s ...