2014-09-26 99 views
0

我正在開發代碼第一個EF6應用程序,我有一個包含相關實體的問題。實體框架 - 替換相關實體不包括

我有模式是這樣的:

public class Product 
{ 
    [Key] 
    [JsonProperty(Order = 0)] 
    [JsonIgnore] 
    public int ProductID { get; set; } 

    [Required] 
    [JsonProperty(Order = 1)] 
    public string Name { get; set; } 

    [Required] 
    [JsonProperty(Order = 2)] 
    public virtual Shop Shop { get; set; } 

    [Required] 
    [JsonProperty(Order = 3)] 
    public virtual ProductCategory Category { get; set; } 

    [Required] 
    [JsonProperty(Order = 4)] 
    public double Price { get; set; } 

    [JsonProperty(Order = 5)] 
    public double? OldPrice { get; set; } 
} 

我的上下文有DBSets,如:

public System.Data.Entity.DbSet<PromoCeny.Models.Product> Products { get; set; } 

public System.Data.Entity.DbSet<PromoCeny.Models.ProductCategory> ProductCategories { get; set; } 

public System.Data.Entity.DbSet<PromoCeny.Models.Shop> Shops { get; set; } 

我試圖訪問所有Product對象,如:

db.Products 

我正在獲取Products的列表,但是兩個屬性ShopCategorynull

這很奇怪,但我有一個工作解決方案,在這樣的東西結果適當的對象(與所有屬性設置正確),但我找不到這些項目之間的區別。

我試圖從模型屬性中刪除virtual標誌,但這也不起作用。

當然,我可以得到產品的列表,如:

db.Products.Include(product => product.Shop).Include(product => product.Category) 

但我想避免這種情況。

你知道如何處理嗎?

編輯:

剛纔我想通了,我有實體的禁用延遲加載。

我已刪除,如:

this.Configuration.LazyLoadingEnabled = false; 

從語境和它的工作現在。

+0

我已經想通了。看我的編輯 – Tomasz 2014-09-26 14:14:19

回答

0

我相信你需要禁用懶加載,只要你的關係定義正確,就應該強制鏈接屬性加載我相信。

+0

你的意思是我應該添加'this.Configuration.LazyLoadingEnabled = false; '上下文? – Tomasz 2014-09-26 14:04:32

+0

@Tomasz是的,我相信應該強制加載所有圖層。 這是一個有用的鏈接[MSDN Page](http://msdn.microsoft.com/zh-cn/data/jj574232。aspx) – Pheonyx 2014-09-26 14:05:54

+0

我以爲你要麼使用include來使初始查詢中的相關項目恢復正常,要麼延遲加載,以便在請求屬性時將它們恢復。如果LazyLoadingEnabled爲false且沒有包含,則不會獲得任何相關屬性。 – Mant101 2014-09-26 14:14:03

0

您遇到的行爲是由延遲加載功能引起的。這可以在你的情況下被禁用,就像這樣:

public class MyContext : DbContext 
{ 
    public MyContext() 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
    } 
} 

請注意,這將關閉延遲加載的一切;如果您的對象圖高度相互關聯,則您的查詢可能會變得非常緩慢,因爲即使簡單的查詢最終可能會加載大量數據。

除去集合屬性virtual修改應禁用延遲加載該財產,但你說這不......要診斷的是,我們需要您的EF配置的詳細信息。