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之类的调用,并获得与特定公司关联的消息列表.但我还需要返回所有空消息.
怎么能实现这一目标?
如果要查询与任何公司无关的消息,则需要CompanyId在Message实体类中为标量属性建模.
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)