现在我意识到这对我来说很难做到。
鉴于:
EF Core 8
// мodels are simplified to highlight the essence
public class Notification
{
public Guid Id { get; set; }
public EmailAddress From { get; set; }
public ICollection<EmailAddress> To { get; set; }
public ICollection<EmailAddress> Cc { get; set; }
public ICollection<EmailAddress> Bcc { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
public class EmailAddress
{
public string DisplayName { get; set; }
public string Address { get; set; }
}
需要进行一些配置,使所有地址的电子邮件最终都出现在同一个表中,并且可能带有一些鉴别器列。喜欢
通知表
id | 来自 | 主题 | 身体 |
---|
电子邮件地址表
id | notification_id | 到 | 抄送 | 密件抄送 | 鉴别器 |
---|
或更佳
id | notification_id | 地址 | 鉴别器 |
---|
您可以使用带有鉴别器的每个层次结构表功能来执行此操作。
扩展
EmailAddress
使每个集合都有一个类型:
public class ToEmailAddress : EmailAddress { }
public class CcEmailAddress : EmailAddress { }
public class BccEmailAddress : EmailAddress { }
修改
Notification
使用新类型:
public ICollection<ToEmailAddress> To { get; set; }
public ICollection<CcEmailAddress > Cc { get; set; }
public ICollection<BccEmailAddress> Bcc { get; set; }
更新
EmailAddress
的模型配置以注册新类型和所需的鉴别器:
modelBuilder.Entity<EmailAddress>()
.HasDiscriminator<string>("discriminator")
.HasValue<EmailAddress>("base")
.HasValue<ToEmailAddress>("to")
.HasValue<CcEmailAddress>("cc")
.HasValue<BccEmailAddress>("bcc");