全局配置将所有枚举存储为字符串,即使它们被定义为可空

问题描述 投票:0回答:1

我想在我的 DBContext 中有一个全局配置,以将模型中的所有枚举保存为数据存储中的字符串,约束是即使枚举可为空,我也需要配置才能工作

我已经找到了这个解决方案,但仅当枚举不可为空时才有效。

protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
  configurationBuilder.Properties<Enum>().HaveConversion<string>();
}

我的期望是定义一个通用规则/配置,而不必为模型中每个可能的枚举编写特定的转换。

更新:

我已经尝试过这些但没有成功:

configurationBuilder.Properties<Enum?>().HaveConversion<string?>();
configurationBuilder.Properties<Enum?>().HaveConversion<string>();

从数据存储中插入或查询数据时,它会抛出

System.NullReferenceException: 'Object reference not set to an instance of an object.'

c# entity-framework-core dbcontext
1个回答
0
投票

这对我有用:

configurationBuilder.Properties<Enum>().HaveConversion<string?>();

我的架构将列定义为可以为 null

NVARCHAR(50)
,我可以存储一行,其中包含枚举值(转换为字符串)和 #null 值,该值使该列保留为默认 #null。

如果您希望将列创建为可为空的字符串,则不确定代码优先,但如果您有现有架构,则它可以与可为空的列一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.