注:“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 后端代码已定义的用户实体,如何扩展字段?的更多相关文章

  1. EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况

    使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...

  2. EF获取DbContext中已注册的所有实体类型

    /// <summary> /// 获取DbContext中已注册的实体类型 /// </summary> /// <typeparam name="T&quo ...

  3. 深入理解 EF Core:EF Core 写入数据时发生了什么?

    阅读本文大概需要 14 分钟. 原文:https://bit.ly/2C67m1C 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...

  4. EF Core 快速上手——EF Core的三种主要关系类型

    系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询   本 ...

  5. EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery

    一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文 ...

  6. 如何在EF Core 使用存储过程

    使用EF Core框架能快速的帮助我们进行常规的数据处理和项目开发,但是ORM虽然好用,但是在许多复杂逻辑的数据处理时,我个人还是偏向用SQL和存储过程的方式去处理,但是研究了一下目前最新版本的EF ...

  7. 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 ...

  8. 【ASP.NET Core快速入门】(十三)Individual authentication 模板、EF Core Migration

    Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...

  9. 菜鸟入门【ASP.NET Core】13:Individual authentication 模板、EF Core Migration

    Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...

  10. EF Core 中DbContext不会跟踪聚合方法和Join方法返回的结果,及FromSql方法使用讲解

    EF Core中: 如果调用Queryable.Count等聚合方法,不会导致DbContext跟踪(track)任何实体. 此外调用Queryable.Join方法返回的匿名类型也不会被DbCont ...

随机推荐

  1. liunx下redis的哨兵环境搭建

    哨兵简介 一定要有一个概念:哨兵实例也是特殊的Redis实例,也就是哨兵实例是独立的进程,多个哨兵实例可以搭建主从(Master-Slave),它们承担的职责和普通的Redis实例不一样.下面是官方文 ...

  2. phpstorm配置laravel语法提示

    摘自:https://cloud.tencent.com/developer/article/1426699 phpstorm配置laravel语法提示 2019-05-15阅读 1930   用习惯 ...

  3. c# 获得变量名称

    string GetVariableName<T>(Expression<Func<T>> expr)        {            var body = ...

  4. Android 13 - Media框架(7)- NuPlayer::Source

    关注公众号免费阅读全文,进入音视频开发技术分享群! Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,我们这一节将 ...

  5. C# wpf 使用GDI+实现截屏

    wpf截屏系列第一章 使用GDI+实现截屏(本章)第二章 使用DockPanel制作截屏框第三章 实现截屏框实时截屏第四章 使用ffmpeg命令行实现录屏 文章目录wpf截屏系列前言一.引用Syste ...

  6. Abp vNext框架 基础知识 依赖注入

    依赖注入 ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的文档在ABP中 ...

  7. java: 找不到符号 java: Compilation failed: internal java compiler error

    java: 找不到符号 java: Compilation failed: internal java compiler error 1.File---->Setting------>ja ...

  8. 第三届机器人、人工智能与信息工程国际学术会议(RAIIE 2024)

    [ACM独立出版/Fellow大咖云集]2024年第二届机器人.人工智能与信息工程国际学术会议(RAIIE 2024) 2024 3rd International Symposium on Robo ...

  9. Navicat Premium v16.0.6 绿色破解版

    这里版本:Navicat Premium v16.0.6.0 ,这个是绿色版,不需要安装,启动Navicat.exe即可用 破解工具:NavicatKeygenPatch(其它版本也能破解) 1.下载 ...

  10. resttemplate调用

    Map<String, Object> queryForHttp(String url, Map<String, Object> header, Map<String, ...