2

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

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

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

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

如何做到这一点?

4

1 回答 1

6

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

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);
于 2012-04-11T12:04:32.373 回答