2012-05-17 71 views
2

我有一個簡單的類的問題。我的類的一個屬性是對另一個類的引用,但是當我讀取時,它始終爲空。實體框架代碼優先:不加載參考對象

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精簡版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) 
+0

你能否提供數據庫模式?顯然與協會有關的問題... – Dennis

+0

好的,我會在一個小時內在家中發佈數據庫...但是,數據庫是用ef生成的。 – Gabriel

+0

我可以登錄到我的計算機並獲取架構。 – Gabriel

回答

3

您應使用Include包括導航性能,如果沒有啓用延遲加載;

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

謝謝,但我得到和例外:指定的包含路徑無效。 EntityType'Product'不聲明名爲'商標'的導航屬性。 – Gabriel

+0

您是否嘗試過「商標」? – Tundey

+0

對不起,我犯了一個錯誤,我重新嘗試與「商標」和工作。還有其他更簡單的方法嗎?因爲產品會有幾個參考?謝謝 – Gabriel