美文网首页
2020-03-31 20:45 值转换器 和 值比较器

2020-03-31 20:45 值转换器 和 值比较器

作者: daiwei_9b9c | 来源:发表于2020-05-20 21:06 被阅读0次

    值转换器允许在读取或写入数据库时转换属性值。

    • ModelClrType ( 实体类型中的属性的 .NET 类型, 例如枚举类型 ) 和 ProviderClrType ( 数据库提供程序理解的 .NET 类型, 例如 string ) , 2个相互转换的 Func。
    • 内置的值比较器
    • 自定义的值转换类 ( 继承 ValueConverter 或者 创建 ValueConverter 的实例 )

    值比较器

    • 为什么需要使用值比较器
    • EFCore 需要比较属性值, 而默认的 EFCore 比较引用而不是深层比较
    • 或者,使用了属性类型为非结构类型的值转换器时, 此时一般需要自定义比较器, 因为如果修改转换后的对象中的属性时, EFCore 不会认为对象发生了改变, 因为 EFCore 比较引用;
    • 覆盖 Equals 方法 和 GetHashCode 方法

    不建议将枚举转换为字符串

    使用值转换可能会影响 EF Core 将表达式转换为 SQL的能力

    看上去很美,用起来悲催, 例如,枚举转换为字符串,数据库内存放的是字符串,
    但如果,EF LINQ中传入了数字参数,则查询可能会出错.

    var converter = new EnumToStringConverter<EquineBeast>();
    modelBuilder
        .Entity<Rider>()
        .Property(e => e.Mount)
        .HasConversion(converter);
    

    或者

    对于内置转换器存在的常见转换,无需显式指定转换器。
    只需配置应使用的提供程序类型,EF 会自动使用适当的内置转换器。
    modelBuilder .Entity<Rider>() .Property(e => e.Mount) .HasConversion(converter);

    内置转换器

    • BoolToZeroOneConverter-布尔值到零和一个
    • BoolToStringConverter-布尔值到字符串(如 "Y" 和 "N")
    • BoolToTwoValuesConverter-布尔值为任意两个值
    • BytesToStringConverter 字节数组到 Base64 编码的字符串
    • CastingConverter-只需要类型强制转换的转换
    • CharToStringConverter-Char 到单字符字符串
    • DateTimeOffsetToBinaryConverter-DateTimeOffset 到二进制编码的64位值
    • DateTimeOffsetToBytesConverter-DateTimeOffset 到字节数组
    • DateTimeOffsetToStringConverter-DateTimeOffset 到字符串
    • DateTimeToBinaryConverter-DateTime 到64位值(包括 Datetimekind.utc)
    • DateTimeToStringConverter-DateTime 到 string
    • DateTimeToTicksConverter-DateTime 到计时周期
    • EnumToNumberConverter-枚举到基础数字
    • EnumToStringConverter 枚举到字符串
    • GuidToBytesConverter-Guid 到字节数组
    • GuidToStringConverter-Guid 到字符串
    • NumberToBytesConverter-任何数值到字节数组
    • NumberToStringConverter-字符串的任何数值
    • StringToBytesConverter 字符串到 UTF8 字节
    • TimeSpanToStringConverter-TimeSpan 到字符串
    • TimeSpanToTicksConverter-TimeSpan 到计时周期

    相关文章

      网友评论

          本文标题:2020-03-31 20:45 值转换器 和 值比较器

          本文链接:https://www.haomeiwen.com/subject/wgxnuhtx.html