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

我正在将旧的 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" : "");


湖上湖
浏览 160回答 2
2回答

一只斗牛犬

感谢伊万和尤里。你们俩都将我引向了对我来说根本不直观的答案。LockNote 字段是一个 Char(1) 字段,它作为表类中的字符串属性出现。我需要在表类中将其更改为 bool 属性,然后使用以下内容:var&nbsp;boolCharConverter&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ValueConverter<bool,&nbsp;string>(v&nbsp;=>&nbsp;v&nbsp;?&nbsp;"X"&nbsp;:&nbsp;"",&nbsp;v&nbsp;=>&nbsp;v&nbsp;==&nbsp;"X");entity.Property(e&nbsp;=>&nbsp;e.LockNote) &nbsp;&nbsp;&nbsp;&nbsp;.HasColumnName("LOCK_NOTE") &nbsp;&nbsp;&nbsp;&nbsp;.IsUnicode(false) &nbsp;&nbsp;&nbsp;&nbsp;.HasConversion(typeof(string)) &nbsp;&nbsp;&nbsp;&nbsp;.HasConversion(boolCharConverter);通过进一步测试,我还可以毫无问题地删除以下内容并进一步简化解决方案。&nbsp;&nbsp;&nbsp;&nbsp;.IsUnicode(false) &nbsp;&nbsp;&nbsp;&nbsp;.HasConversion(typeof(string))

繁花不似锦

您可以尝试使用内置的 BoolToStringConverter:var&nbsp;converter&nbsp;=&nbsp;new&nbsp;BoolToStringConverter("",&nbsp;"X");entity.Property(e&nbsp;=>&nbsp;e.LockNote) &nbsp;&nbsp;&nbsp;&nbsp;.HasColumnName("LOCK_NOTE") &nbsp;&nbsp;&nbsp;&nbsp;.HasMaxLength(1) &nbsp;&nbsp;&nbsp;&nbsp;.IsUnicode(false) &nbsp;&nbsp;&nbsp;&nbsp;.HasConversion(converter);
打开App,查看更多内容
随时随地看视频慕课网APP