我正在将一个旧的Server设计转换为EFCore2.21。更改DB设计是不实际的。其中一个字段为Char(1),其中“X”为true。我添加了一个.HasConversion,但是它不起作用。这些值没有被转换,在更改并试图保存之后,我得到“不能将'System.Boolean‘类型的对象转换为’System.String‘类型的对象”。我引用的是https://learn.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" : "");发布于 2019-01-15 16:14:50
您可以尝试使用内置BoolToStringConverter
var converter = new BoolToStringConverter("", "X");
entity.Property(e => e.LockNote)
.HasColumnName("LOCK_NOTE")
.HasMaxLength(1)
.IsUnicode(false)
.HasConversion(converter);发布于 2019-01-16 00:28:18
多亏了伊凡·安尤里。你们俩都带我找到了对我来说完全不是直觉的答案。LockNote字段是一个Char(1)字段,它作为string属性出现在表类中。我需要将表类中的内容更改为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))https://stackoverflow.com/questions/54202612
复制相似问题