实体框架由一对多实体订购

时间:2012-09-04 15:00:26

标签: c# .net entity-framework

我见过类似的但是找不到答案。我有2个enities出版和作者。 作者不是强制性的,当我在OrderBy Publication.Author.Surname时,我得到NullReferenceException,因为Publication dosnt总是有一个相关的作者。我如何编写这个简单的查询以及为什么heck dosnt EhtityFramework知道如何处理这个?

public class Publication {
[Key]
public int ID { get; set; }

public string Title { get; set; }

[Display(Name = "Author")]
public int? AuthorId { get; set; }
public virtual Author Author { get; set; }
}

public class Author{
[Key]
public virtual int ID { get; set; }

public virtual string Forename { get; set; }

public virtual string Surname { get; set; }
}

this.db.Publications
    .OrderBy(p=>p.Author.Surname)
    .Skip(skip)
    .Take(model.PageSize).ToList();

失败,因为Publication dosnt总是有一个相关的作者。注意:db是Entity Framework DBContext,如下所示:

public class PPRDBContext : DbContext
{
  public DbSet<Publication> Publications { get; set; }
  public DbSet<Author> Authors { get; set; }
}

1 个答案:

答案 0 :(得分:3)

这不是EF的错 - 在访问引用对象的属性时,它是我所知道的任何语言的常见陷阱。

根据您是否希望首先使用NULL值,您可以执行以下操作:

.OrderBy(p=> p.Author == null ? "" : p.Author.Surname)

如果您希望NULL值最后使用,请执行以下操作:

.OrderBy(p=> p.Author == null ? "ZZZZZ" : p.Author.Surname)