为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core-2-2 HasConversion Char(1) to bool

EF Core-2-2 HasConversion Char(1) to bool

C#
湖上湖 2022-07-23 16:34:07
我正在将旧的 SQL Server DB 设计转换为 EF Core 2.21。数据库设计是不切实际的改变。一个字段是 Char(1),“X”为真。我添加了一个 .HasConversion 但它不起作用。值未转换,更改并尝试保存后我得到“'System.Boolean'类型的对象无法转换为'System.String'类型”。我正在引用https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions,它说转换可以从一种类型的值到另一种类型的值。我错过了什么?这可以做到吗?entity.Property(e => e.LockNote)     .HasColumnName("LOCK_NOTE")     .HasMaxLength(1)     .IsUnicode(false)     .HasConversion(v => v == "X" ? true : false, v => v == true ? "X" : "");
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

感谢伊万和尤里。你们俩都将我引向了对我来说根本不直观的答案。LockNote 字段是一个 Char(1) 字段,它作为表类中的字符串属性出现。我需要在表类中将其更改为 bool 属性,然后使用以下内容:

var boolCharConverter =    new ValueConverter<bool, string>(v => v ? "X" : "", v => v == "X");entity.Property(e => e.LockNote)
    .HasColumnName("LOCK_NOTE")
    .IsUnicode(false)
    .HasConversion(typeof(string))
    .HasConversion(boolCharConverter);

通过进一步测试,我还可以毫无问题地删除以下内容并进一步简化解决方案。

    .IsUnicode(false)
    .HasConversion(typeof(string))


查看完整回答
反对 回复 2022-07-23
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您可以尝试使用内置的 BoolToStringConverter

var converter = new BoolToStringConverter("", "X");entity.Property(e => e.LockNote)
    .HasColumnName("LOCK_NOTE")
    .HasMaxLength(1)
    .IsUnicode(false)
    .HasConversion(converter);


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信