实体框架代码优先:不加载引用的对象

时间:2012-05-17 13:25:06

标签: c# entity-framework code-first

我的简单课程有问题。我班级的一个属性是对另一个班级的引用,但是当我读到它时,它总是为空。

public class Product
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public String Description { get; set; }

    public virtual Trademark Trademark { get; set; }
}

public class Trademark
{
    public int TrademarkId { get; set; }

    public String Description { get; set; }
}

这些是我的课程,非常简单。 然后,当我得到第一个元素时:

Product p = context.Products.First();

p包含正确的产品,但商标为空。

即使我想使用linq进行查询,例如:

var prods = context.Products.Where(p => p.Trademark.TrademarkId == 1).ToList();

生成数据库确定。

使用EF 4.3.1,使用SqlServer compact Edition 4.0

感谢您的任何建议。

添加:这是我的上下文类:

public class HPContext : DbContext
{
    public HPContext()
        : base()
    {
        this.Configuration.LazyLoadingEnabled = false; //Just for test

    }

    public DbSet<Product> Products { get; set; }
    public DbSet<Trademark> Trademarks { get; set; }  

}

添加:数据库架构:

Table: 
  Products

Fields: 
  Id int primaryKey
  Description nvarchar(4000)
  Trademark_TrademarkId int


Table:
  Trademarks

Fields:
  TrademarkId int PrimaryKey
  Description nvarchar(4000)

1 个答案:

答案 0 :(得分:3)

如果未启用延迟加载,则应使用Include包含导航属性;

Product p = context.Products.Include("TradeMark").First();