为可为空的外键创建导航属性

时间:2012-04-11 11:48:18

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

我正在使用EntityFramework v4.3.1并通过继承DbContext并覆盖OnModelCreating()来通过代码构建我的模型。我有一个名为公司的表格和一个名为消息的表格。 消息表具有可为空的外键 Messages.CompanyId 。设置此选项后,特定邮件将与特定公司相关联。当此字段为空时,该消息将与所有公司相关联。

我的问题是我不知道如何在OnModelCreating()方法中表达这种行为。如果我这样做:

modelBuilder.Entity<Message>().HasRequired(o => o.Company).WithMany(o => o.Messages).Map(o => o.MapKey("CompanyId"));

我成功获取公司的导航属性,以便我可以执行TestCompany.Messages之类的调用,并获得与特定公司关联的消息列表。但我还需要返回所有空消息。

如何实现这一目标?

1 个答案:

答案 0 :(得分:6)

如果要查询与任何公司无关的消息,则需要在CompanyId实体类中为标量属性Message建模。

public class Message
{
    //other porperties

    public int? CompanyId { get; set; }
}

使用HasOptional代替HasRequired来配置关系。

modelBuilder.Entity<Message>()
    .HasOptional(o => o.Company).WithMany(o => o.Messages)
    .HasForeignKey(m => m.CompanyId);

然后您可以使用

进行查询
var messages = db.Messages.Where(m => m.CompanyId == null);