Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架核心-具有转换-支持空值_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

Entity framework 实体框架核心-具有转换-支持空值

Entity framework 实体框架核心-具有转换-支持空值,entity-framework,asp.net-core,entity-framework-core,Entity Framework,Asp.net Core,Entity Framework Core,我有一个带有通知电子邮件属性的EF模型。通知电子邮件以字符串形式保存在数据库中,以“;”分隔。我添加了一个转换来检索模型中作为ICollection的数据。除了一件事之外,它工作得很好:当字符串为null时,集合也为null,我想将其转换为空集合。可能吗 //This is my code entity.Property(e => e.NotificationEmails) .HasConversion( v => str

我有一个带有通知电子邮件属性的EF模型。通知电子邮件以字符串形式保存在数据库中,以“;”分隔。我添加了一个转换来检索模型中作为ICollection的数据。除了一件事之外,它工作得很好:当字符串为null时,集合也为null,我想将其转换为空集合。可能吗

//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忽略了它。

目前,不可能:

空值永远不会传递给值转换器。这使得转换的实现更加容易,并允许在可为null和不可为null的属性之间共享转换

但可能在EF Core 5中:

它并不优雅,但您可以使用支持字段:

公共类通知
{
私人列表_emails=新列表();
公开名单电子邮件
{
获取=>\u电子邮件;
set=>_emails=value??新建列表();
}
}
公共类NotificationContext:DbContext
{
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().Property(d=>d.Emails).HasConversion(
v=>string.Join(“,”,v.Select(s=>s.Trim()),
v=>v.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries.ToList())
);
modelBuilder.Entity()
.Property(b=>b.email)
.HasField(“\u电子邮件”)
.UsePropertyAccessMode(PropertyAccessMode.Property);
}
}

注意:在where中,空列表不会转换为null,而是转换为空字符串。

将数据存储为分号分隔的项是一个糟糕的主意。“做一张桌子就行了。”戴维格,你能解释一下为什么吗?首先,你不需要像这里这样糟糕的转换器。有很多原因。@DavidG您知道的任何其他原因真的会有帮助吗?@TalHumy其他一些原因:服务器端过滤不可能(或很难做到)。无法单独添加/删除/更新项目-必须更新整个项目。等等。但为了回答您的具体问题,迄今为止,EF核心值转换器不适用于
null
值-假设
null
始终转换为
null
。因为无论如何都不能在L2E查询中使用这样的集合,所以可以在对象级别使用显式支持字段和特殊属性getter来处理它。