我正在将旧的 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))
繁花不似锦
TA贡献1851条经验 获得超4个赞
您可以尝试使用内置的 BoolToStringConverter:
var converter = new BoolToStringConverter("", "X");entity.Property(e => e.LockNote) .HasColumnName("LOCK_NOTE") .HasMaxLength(1) .IsUnicode(false) .HasConversion(converter);
- 2 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消