四,值转换器

值转换器

基础知识
值转换器允许向数据库读取或写入数据时,在 模型和数据库之间转换数据。

例如:模型字段
类型是枚举,保存数据库中的类型为字符串或者INT类型,更新或者插入数据时,需要将枚举
转换成数据库类型,查询数据时,需要将数据库类型转换为模型的字段类型。

  • 配置值转换器
	public class Rider
	{
		 public int Id { get; set; }
		 public EquineBeast Mount { get; set; }
	}
	
	public enum EquineBeast
	{
		 Donkey,
		 Mule,
		 Horse,
		 Unicorn
	}

	//转换方式1
	modelBuilder
	 .Entity<Rider>()
	 .Property(e => e.Mount)
	 .HasConversion(v => 
					 v.ToString(), 
					 v => (EquineBeast)Enum.Parse(typeof(EquineBeast),
					 v));
	 
	//转换方式2,ValueConverter 值转换器类
	var converter = new ValueConverter<EquineBeast, string>(v =>
					 v.ToString(),
					 v => (EquineBeast)Enum.Parse(typeof(EquineBeast), 
					 v));
	modelBuilder.Entity<Rider>() .Property(e => e.Mount).HasConversion(converter);
  • 微软 EF Core 中内置的转换器
    ○ BoolToZeroOneConverter - Bool to zero and one
    ○ BoolToStringConverter - Bool to strings such as “Y” and “N”
    ○ BoolToTwoValuesConverter - Bool to any two values
    ○ BytesToStringConverter - Byte array to Base64-encoded string
    ○ CastingConverter - Conversions that require only a type cast
    ○ CharToStringConverter - Char to single character string
    DateTimeOffsetToBinaryConverter - DateTimeOffset to binary-encoded 64-bit
    value
    ○○ DateTimeOffsetToBytesConverter - DateTimeOffset to byte array
    ○ DateTimeOffsetToStringConverter - DateTimeOffset to string
    ○ DateTimeToBinaryConverter - DateTime to 64-bit value including DateTimeKind
    ○ DateTimeToStringConverter - DateTime to string
    ○ DateTimeToTicksConverter - DateTime to ticks
    ○ EnumToNumberConverter - Enum to underlying number
    ○ EnumToStringConverter - Enum to string
    ○ GuidToBytesConverter - Guid to byte array
    ○ GuidToStringConverter - Guid to string
    ○ NumberToBytesConverter - Any numerical value to byte array
    ○ NumberToStringConverter - Any numerical value to string
    ○ StringToBytesConverter - String to UTF8 bytes
    ○ TimeSpanToStringConverter - TimeSpan to string
    ○ TimeSpanToTicksConverter - TimeSpan to ticks

  • ex

    var converter = new EnumToStringConverter<EquineBeast>();
    modelBuilder
     .Entity<Rider>()
     .Property(e => e.Mount)
     .HasConversion(converter);
    
  • 预定义的转换

	modelBuilder.Entity<Rider>().Property(e => e.Mount).HasConversion<string>();
  • 也可通过数据注解的方式指定类型。
    public class Rider
	{
	 public int Id { get; set; }
	 [Column(TypeName = "nvarchar(24)")]
	 public EquineBeast Mount { get; set; }
	}

通过接口实现,可定制自己的转换器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值