2017-01-18 4 views
-1

EFの関連エンティティに問題があります。遅延ロードの問題EF MVC

これは私のProductクラスである:

public class Product 
{ 
    public int Id { get; set; } 
    public int AtpID { get; set; } 
    public int SupplierID { get; set; } 
    public string AtpName { get; set; } 
    public string Name { get; set; } 
    public string ArticleNo { get; set; } 
    public string SupplierNo { get; set; } 
    public string AtpPrice { get; set; } 
    public string AtpStock { get; set; } 
    public string AtpDeliveryDays { get; set; } 
    public bool FitsAllCars { get; set; } 
    public int? CategoryId { get; set; } 

    public virtual ICollection<ProductReference> ProductReferences { get; set; } 
    public virtual ICollection<ProductDetail> ProductDetails { get; set; } 
} 

これはProductDetailsクラスです:

public class ProductDetail 
{ 
    public int Id { get; set; } 

    [ForeignKey("ProductId")] 
    public virtual Product Product { get; set; } 
    public int ProductId { get; set; } 

    public int ProductDetailTypeId { get; set; } 
    public int ProductDetailKeyId { get; set; }  
    public string AtpTextKey { get; set; } 
    public string AtpTextValue { get; set; } 
    public string TextKey { get; set; } 
    public string TextValue { get; set; } 
    public bool IsVisible { get; set; } 
    public bool Checked { get; set; } 

} 

問題は、あなたが添付で見ることができるようProductDetailsは、製品にロードされていないということですスクリーンショット、それは私にエラーを与える:

enter image description here

ProductReferencesが正しく読み込まれ、ProductDetailsのみでこの問題が発生します。 この問題で私を助けることができますか?私はこの問題を引き起こす原因を知りませんでした。 ありがとう!あなたが選択したとき

+2

を選択してください。 –

+0

あなたのお問い合わせはどこですか? –

+2

関連するコレクションにアクセスしようとすると例外が発生していますか? –

答えて

1

含める使用してください:

_context.Product.Include('ProductDetails').ToList() 

をあなたが遅延ロードを有効にしたい場合は、ロードされない偽であるならば、 を確認してください、これはDBContextクラスに設定されています。

var products = await _ctx.Products 
       .Include(p => p.ProductDetails) 
       .ToListAsync(); 
+0

私はこの方法で試してみましたが、このエラーが発生したので奇妙です:追加情報:指定されたインクルードパスが無効です。 EntityType 'OnlineCarStore.DAL.Product'は 'ProductDetail'という名前のナビゲーションプロパティを宣言しません.. Altought Productクラスのナビゲーションプロパティを持っています – Orsi

+0

これがあなたのために機能するかどうかを確認してください –

+0

ProductDetailを試してみましたが、 var productList = db.Product.Include( "ProductDetail"); – Orsi

1

はこのようなものでProductDetailsを含めて私の答えで述べたように、あなたは積極的なロードを使用する必要があります。製品にはProductDetailsへの参照が含まれ、ProductDetailsにはProductへの参照が含まれています。この集約(オブジェクトグラフ)をシリアル化しようとすると、循環参照例外がスローされます。

DTOを使用して、特定のビューで消費するデータのみを転送することをお勧めします。 DTOは単純なプロパティを持つ必要があるため、循環参照エラーは作成されません。

0

私はあなたが循環参照によって引き起こされた例外が発生した推測:

this.Configuration.LazyLoadingEnabled = true;