2

在代码优先实体框架 5 中定义相关集合的正确方法是什么?我正在关注此摘要,但有些东西不起作用。

我有以下模型:

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属性为空。

我试过制作OrderLines虚拟,它没有帮助。否则,一切都设置为默认值。延迟加载是真的,CreateProxy 是真的......

当我尝试Include("OrderLines")它工作并从数据库中获取行时。

4

2 回答 2

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;}      
}
于 2013-05-15T19:53:56.397 回答
1

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

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

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

于 2013-05-15T17:36:21.553 回答