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

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

我正在使用 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 之类的调用,并且获得与特定公司关联的消息列表。但我还需要返回所有空消息。

如何实现这一目标?

最佳答案

如果您想要查询不与任何公司关联的消息,则需要在 Message 实体类中对标量属性 CompanyId 进行建模。

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);

关于c# - 为可为空的外键创建导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105289/

相关文章:

entity-framework-4 - Entity Framework 4 中的一对一错误

entity-framework - Entity Framework Code First 如何按降序创建索引?

c# - 什么约定将 poco 属性自动映射到列?我怎样才能禁用该自动映射?

c# - 在unity3D中显示数学方程

c# - 解码 G711 从 C++ 转换为 C#

c# - 获取ListView项目属性

c# - Entity Framework - 级联删除未在实体模型中设置

c# - 在让网络爬虫获得总链接数时需要帮助理解混淆

c# - 为什么 Contains() 运算符会如此显着地降低 Entity Framework 的性能?

linq - Entity Framework 代码优先 - 多对多 - 包括条件