【发布时间】:2019-05-13 08:58:00
【问题描述】:
我有一个带有通知电子邮件属性的 EF 模型。通知电子邮件以字符串形式保存在数据库中,以“;”分隔。我添加了一个转换来检索模型中的 ICollection 数据。除了一件事之外,这很好用:当字符串为空时,集合也为空,我想将其转换为空集合。可能吗?
//This is my code
entity.Property(e => e.NotificationEmails)
.HasConversion(
v => string.Join(",", v.Select(s => s.Trim())),
v => v.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
我尝试添加 String.IsNullOrEmpty(v) 但 EF 忽略它。
【问题讨论】:
-
将数据存储为分号分隔的项目是一个糟糕的主意。做一张桌子。
-
@DavidG 你能解释一下原因吗?
-
首先,您不需要像这里那样糟糕的转换器。有很多原因。
-
@DavidG 你知道的任何其他原因真的有帮助吗?
-
@TalHumy 其他一些原因:服务器端过滤不可能(或很难做到)。无法单独添加/删除/更新项目 - 必须更新整个项目。等等。但是要回答您的具体问题,到目前为止,EF Core 值转换器并不需要
null值 - 假设null始终转换为null。由于无论如何您都不能在 L2E 查询中使用此类集合,因此您可以使用显式支持字段和特殊属性 getter 在对象级别处理它。
标签: entity-framework asp.net-core entity-framework-core