代码优先EF5中的一对多导航属性为null

时间:2013-05-15 07:14:46

标签: entity-framework ef-code-first

在代码第一个Entity Framework 5中定义相关集合的正确方法是什么? 我跟着这个summary,但有些东西不起作用。

我有以下型号:

class Order
{
  public Guid Id {get; set; }
  public DateTime Created {get; set;}
  public ICollection<OrderLine> OrderLines {get; set;}
}

class OrderLine
{
  public Guid Id {get; set;}
  public Guid OrderId {get; set;}
  public Order Order {get; set;}
  public string Product {get;set;}
}

class OrderContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
    public DbSet<OrderLine> OrderLines { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        base.OnModelCreating(modelBuilder);
    }
}

数据库中有一些Order行。加载时,OrderLines属性为null。

我尝试过OrderLines虚拟,但没有帮助。 否则,一切都设置为默认值。延迟加载为true,CreateProxy为true ...

当我尝试Include("OrderLines")时,它可以工作并从DB中获取行。

2 个答案:

答案 0 :(得分:2)

OrderLine尝试在导航属性上放置FK注释:

class OrderLine
{
  public Guid Id {get; set;}
  public string Product {get;set;}

  // 1:many with Order
  public virtual Guid OrderId {get; set;}
  [ForeignKey("Id")]
  public virtual Order Order {get; set;}      
}

答案 1 :(得分:1)

使用数据注释来注释外键属性。您不再需要使用Fluent API。

[ForeignKey("Id")]
public virtual ICollection<OrderLine> OrderLines {get; set;}

我原本以为它会默认创建它。