具有枚举到字符串值转换的 EF Core 的默认值

GTH*_*ten 8 .net c# enums entity-framework-core

EF Core 2.1+ 支持值转换。您可以使用内置函数EnumToStringConverter<>自动将枚举转换为字符串,反之亦然。

我正在连接到现有数据库,并希望将其中一列转换为枚举,所以EnumToStringConverter<>似乎正合我意。但是,数据库也不在我的控制范围内(我只有读取访问权限),因此如果有人在表中插入一行字符串值与我的任何枚举定义都不匹配,会发生什么情况?

我最好希望将任何未知值映射到枚举值,但除了手动创建自己的对象(在其中实现我自己的手动解析所有字符串值并映射它们)Unknown之外,我找不到任何有关如何执行此操作的文档ValueConverter到适当的枚举值。这看起来有点麻烦并且增加了额外的维护,所以我非常希望在这里进行一些自动化...这意味着如果在数据库中找到未知的字符串值,EFCore 会自动将其映射到我的自定义Unknown枚举值。

这可能吗?

vsa*_*nov -2

如果我理解正确的话,这应该可以解决问题:

 entity.Property(e => e.MyEnumField)
        .HasMaxLength(50)
        .HasConversion(
                v => v.ToString(),
                v => {


                if(Enum.TryParse(v,true,out var res)){
                return res;
                }

                return MyEnum.Default;

                })
               .IsUnicode(false);
Run Code Online (Sandbox Code Playgroud)

我没有测试过这个。

来源:https://learn.microsoft.com/en-us/dotnet/api/system.enum.tryparse ?view=netframework-4.8

https://entityframeworkcore.com/knowledge-base/44262314/how-can-i-make-ef-core-database-first-use-enums-

  • 这种方法行不通。事实上,它甚至不会编译。至少在VS2019版本16.4.5下不行。错误是“带有语句主体的 lambda 表达式无法转换为表达式树”。我的猜测是 EF Core 无法将其转换为服务器端 eval。我和@GTHVidsten 处境相同,刚刚尝试过。 (4认同)