首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF核-2-2 HasConversion焦(1)至bool

EF核-2-2 HasConversion焦(1)至bool
EN

Stack Overflow用户
提问于 2019-01-15 16:06:43
回答 2查看 3.3K关注 0票数 1

我正在将一个旧的Server设计转换为EFCore2.21。更改DB设计是不实际的。其中一个字段为Char(1),其中“X”为true。我添加了一个.HasConversion,但是它不起作用。这些值没有被转换,在更改并试图保存之后,我得到“不能将'System.Boolean‘类型的对象转换为’System.String‘类型的对象”。我引用的是https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions,其中表示可以从一种类型的值转换为另一种类型的值。我遗漏了什么?可以这样做吗?

代码语言:javascript
复制
entity.Property(e => e.LockNote)
    .HasColumnName("LOCK_NOTE")
    .HasMaxLength(1)
    .IsUnicode(false)
    .HasConversion(v => v == "X" ? true : false, v => v == true ? "X" : "");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-15 16:14:50

您可以尝试使用内置BoolToStringConverter

代码语言:javascript
复制
var converter = new BoolToStringConverter("", "X");

entity.Property(e => e.LockNote)
    .HasColumnName("LOCK_NOTE")
    .HasMaxLength(1)
    .IsUnicode(false)
    .HasConversion(converter);
票数 0
EN

Stack Overflow用户

发布于 2019-01-16 00:28:18

多亏了伊凡·安尤里。你们俩都带我找到了对我来说完全不是直觉的答案。LockNote字段是一个Char(1)字段,它作为string属性出现在表类中。我需要将表类中的内容更改为bool属性,然后使用以下方法:

代码语言:javascript
复制
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);

通过进一步的测试,我还可以在没有问题的情况下删除以下内容,并进一步简化解决方案。

代码语言:javascript
复制
    .IsUnicode(false)
    .HasConversion(typeof(string))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54202612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档