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

Dot*_*per 2 c# entity-framework-4 ef-code-first

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

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

modelBuilder.Entity<Message>().HasRequired(o => o.Company).WithMany(o => o.Messages).Map(o => o.MapKey("CompanyId"));
Run Code Online (Sandbox Code Playgroud)

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

怎么能实现这一目标?

Era*_*nga 6

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

public class Message
{
    //other porperties

    public int? CompanyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并使用HasOptional而不是配置关系HasRequired.

modelBuilder.Entity<Message>()
    .HasOptional(o => o.Company).WithMany(o => o.Messages)
    .HasForeignKey(m => m.CompanyId);
Run Code Online (Sandbox Code Playgroud)

然后你可以使用查询

var messages = db.Messages.Where(m => m.CompanyId == null);
Run Code Online (Sandbox Code Playgroud)