代码第一个关系的虚拟属性仍然使用不可为空的列构建

时间:2017-09-19 11:33:25

标签: c# entity-framework ef-code-first

我的数据模型中的Emails对象与EmailTemplates有关系,但由于电子邮件不 NEED 有关联的模板,我希望关系允许空值,以便我在Email中将属性设置为虚拟:

public class Email
{
    public int Id { get; set; }
    public virtual EmailTemplate EmailTemplate { get; set; }
}

遗憾的是,这并未将为FK关系生成的EmailTemplateId列设置为可为空,因此每当我尝试添加不使用模板的电子邮件时,我的insert语句都会违反约束。

EmailTemplateId column should accept null values

如何修改数据模型以允许此关系为空?

1 个答案:

答案 0 :(得分:0)

virtual修饰符与所需属性无关。您可以通过添加可为空的外键(int?)属性来实现您想要的功能:

public class Email
{
    public int Id { get; set; }

    [ForeignKey("EmailTemplate")]
    public int? EmailTemplateId { get; set; }
    public virtual EmailTemplate EmailTemplate { get; set; }
}

另一种方法是在上下文的OnModelCreating覆盖中添加映射:

modelBuilder.Entity<Email>()
    .HasOptional(m => m.EmailTemplate )
    .WithMany().Map(m => m.MapKey("EmailTemplateId"));