ProductとPictureの 2 つのエンティティがあります。商品の画像は 1 つしかない場合もあれば、まったくない場合もあり、1 つの画像を多くの商品にマッピングできるという考え方です。
public class Product
{
public int Id {get; set;}
public Picture Picture { get; set; }
public bool Enabled { get; set; }
public string Text { get; set; }
}
Pictureエンティティは、すべての写真を含む別の Pictures エンティティへのマッピングであるため (この Picture エンティティには、製品の写真のみのマッピングが含まれます)、基本的に ID を持つ 2 つの列のみが含まれます。
public class Picture
{
public int Id {get; set;}
public int PictureId { get; set; }
}
これは、 Productエンティティのモデル バインダーです。
modelBuilder.Entity<Product>().HasOptional<Picture>(pr => pr.Picture);
画像付きのProductエンティティを作成するか、既存のエンティティに画像を追加すると、 Productテーブルに作成されたPicture_Id列に、PictureテーブルのIdが正しく取り込まれます。問題は、 Productを取得しようとしたときです。Productエンティティ内のPictureエンティティが null です。マッピングが間違っていると思います。Productエンティティを取得するときに、 PictureエンティティをProductエンティティ内に設定する方法を教えてください。取得コードは次のとおりです。
public Product GetProductById(int productId)
{
var query = from pr in _productRepository.Table
where pr.Id == productId
select pr;
return query.FirstOrDefault();
}
編集:依存性注入に含めるカスタムIRepositoryサービスを使用しています
IRepository<Product>
IRepositoryインターフェイスには、次のメソッドが含まれています。
void Insert(T entity);
void Update(T entity);
void Delete(T entity);
IQueryable<T> Table { get; }
これはTableの実装です:
public virtual IQueryable<T> Table
{
get
{
return this.Entities;
}
}
private IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
return _entities;
}
}
IQueryableであるため、.Include("Picture")をTableに追加できません。遅延読み込みも有効にしましたが、結果はありませんでした。