我有兩個實體 - 產品和圖片。這個想法是,產品只能有一張照片或沒有照片,而且照片可以映射到許多產品。實體框架5.0代碼第一對一和一對多關係
public class Product
{
public int Id {get; set;}
public Picture Picture { get; set; }
public bool Enabled { get; set; }
public string Text { get; set; }
}
的圖片實體是一個包含所有的圖片(此圖片實體只包含圖片爲產品的映射)另一圖片實體的映射,所以基本上只包含兩個與IDS列。
public class Picture
{
public int Id {get; set;}
public int PictureId { get; set; }
}
這是產品實體
modelBuilder.Entity<Product>().HasOptional<Picture>(pr => pr.Picture);
我的模型綁定當我創建一個產品實體圖片,或將圖片添加到現有的實體Picture_Id列創建於產品表正確填充Id從Pictur e表。問題是當我嘗試檢索產品。 圖片實體裏面的產品實體爲空。我懷疑映射不正確。你能告訴我如何填充圖片實體當我檢索它時產品實體。下面是檢索代碼:
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; }
這是表執行:
public virtual IQueryable<T> Table
{
get
{
return this.Entities;
}
}
private IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
return _entities;
}
}
我不能添加.INCLUDE( 「圖片」)到表,因爲它是IQueryable的。 我也啓用了延遲加載,但沒有結果。
你能發佈_productRepository的代碼? – 2013-02-13 11:57:20
我相信你已禁用懶惰加載。看到這篇文章,它顯示了加載相關數據的多種方式:http://msdn.microsoft.com/en-us/library/vstudio/bb896272(v=vs.100).aspx – 2013-02-13 11:58:49
我啓用了延遲加載,但沒有效果。 – 2013-02-13 12:43:04