私は今までの3つのエンティティで構成されたエンティティモデルでEntity Framework 6.1を使用していますが、Product
,ProductImage
およびFile
です。しかし、私のデータがデータベースに永続的に保存されている間、私はInclude()
メソッドを使って熱心な読み込みを使用してデータを読み込むことにいくつかの困難を抱えています。私が使っているエンティティは以下の通りです。Entity Frameworkを使用している間にクエリが関連するデータを読み込めないのはなぜですか?
Productエンティティ:
public class Product
{
ICollection<ProductImage> images;
public Product()
{
images = new List<ProductImage>();
}
public ICollection<ProductImage> Images
{
get { return images; }
set { images = value; }
}
}
ファイルの実体:
public class File
{
private Guid fileId;
public File()
{
FileId = Guid.NewGuid();
}
public Guid FileId
{
get { return fileId; }
set { fileId = value; }
}
}
ProductImageエンティティ:
public class ProductImage
{
private File file;
private Product product;
private ProductImage()
{
file = new File();
product = new Product();
}
public ProductImage(Product product, File file)
{
this.product = product;
this.file = file;
}
[Key]
[Column(Order = 0)]
[ForeignKey("Product")]
public int ProductId
{
get { return product.ProductId; }
set { product.ProductId = value; }
}
[Key]
[Column(Order = 1)]
[ForeignKey("File")]
public Guid FileId
{
get { return file.FileId; }
set { file.FileId = value; }
}
public File File
{
get { return file; }
set { file = value; }
}
[InverseProperty("Images")]
public Product Product
{
get { return product; }
set { product = value; }
}
}
私はその後、Product
をロードするには、以下の機能を利用しようとすると、そのProductImage
と関連するFile
ing:
static Product LoadProduct(int productId)
{
using (var db = new ProductCatalogueDbContext())
{
var query = from product in db.Products
.Include(p => p.Images.Select(i => i.File))
.Where(p => p.ProductId == productId)
select product;
return query.SingleOrDefault();
}
}
私が使用しているクエリに問題はありますか?
どのようなエラーがありますか? –
エラーはありません。 Fileのデータはロードされません。これには、Fileクラスのプロパティであったファイルの名前やサイズなどが含まれます。 –
遅延ロードの恩恵を受けるためには、ナビゲーションプロパティを仮想にする必要があります。たぶんこれは副作用としてあなたの問題を解決します。 – musium