0

0

C#中如何使用EF Core的值转换器?如何配置?

小老鼠

小老鼠

发布时间:2025-10-14 09:17:01

|

275人浏览过

|

来源于php中文网

原创

值转换器可在EF Core中实现CLR类型与数据库类型的双向转换,如将枚举转为字符串存储、序列化List为JSON等,通过Fluent API在OnModelCreating中配置,支持内置和自定义转换器,提升模型灵活性与数据库兼容性。

c#中如何使用ef core的值转换器?如何配置?

在 C# 中使用 EF Core 的值转换器(Value Converters)可以让你在将数据写入数据库和从数据库读取时,自动转换属性的值。这在实体模型中的类型与数据库列类型不一致时特别有用,比如使用 枚举字符串存储加密字段、或处理 复杂类型如 List/JSON 等场景。

1. 什么是值转换器?

EF Core 值转换器允许你在 CLR 类型和数据库表示之间进行双向转换。例如:

  • enum 转为字符串存储到数据库
  • DateTimeOffset 转为 UTC 时间存储
  • List 序列化为 JSON 字符串

转换发生在 EF Core 写入数据库前和读取后,对业务代码透明。

2. 如何配置值转换器?

值转换器可以通过 Fluent APIOnModelCreating 方法中配置。以下是常见用法示例:

示例1:使用内置转换器(Enum 转字符串)

假设你有一个用户状态枚举:

public enum UserStatus
{
    Active,
    Inactive,
    Pending
}

public class User { public int Id { get; set; } public string Name { get; set; } public UserStatus Status { get; set; } }

你想把 Status 以字符串形式存入数据库:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .Property(e => e.Status)
        .HasConversion();
}

这样 EF Core 会自动将 Active 存为 "Active" 字符串。

易森网络企业版
易森网络企业版

如果您是新用户,请直接将本程序的所有文件上传在任一文件夹下,Rewrite 目录下放置了伪静态规则和筛选器,可将规则添加进IIS,即可正常使用,不用进行任何设置;(可修改图片等)默认的管理员用户名、密码和验证码都是:yeesen系统默认关闭,请上传后登陆后台点击“核心管理”里操作如下:进入“配置管理”中的&ld

下载

示例2:自定义转换器(List 转 JSON)

如果你想将一个字符串列表序列化为 JSON 存储:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List Tags { get; set; }
}

使用 ValueConverter 配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .Property(e => e.Tags)
        .HasConversion(
            v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null),
            v => JsonSerializer.Deserialize>(v, new JsonSerializerOptions())
        );
}

这样 Tags 会被序列化成 JSON 字符串存入数据库。

示例3:创建可复用的转换器类

对于复杂逻辑,建议封装成类:

public class JsonValueConverter : ValueConverter
    where T : class, new()
{
    public JsonValueConverter() : base(
        v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null),
        v => JsonSerializer.Deserialize(v, new JsonSerializerOptions()) ?? new T())
    {
    }
}

然后在模型中使用:

modelBuilder.Entity()
    .Property(e => e.Tags)
    .HasConversion(new JsonValueConverter>());

3. 注意事项

  • 转换器只影响数据库读写,不影响内存中的实体操作
  • LINQ 查询中涉及转换字段时,EF Core 需能翻译转换逻辑,否则可能抛异常
  • 尽量避免在转换器中做耗时操作(如加解密),会影响性能
  • 如果字段用于查询或索引,确保转换后的值适合数据库操作

基本上就这些。值转换器是 EF Core 处理类型映射的灵活方式,合理使用可以让模型设计更贴近业务,同时保持数据库兼容性。配置简单,但功能强大。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

415

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

258

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

209

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1468

2023.10.24

excel表格操作技巧大全 表格制作excel教程
excel表格操作技巧大全 表格制作excel教程

Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

0

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.4万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号