【发布时间】:2013-02-13 23:11:43
【问题描述】:
我有两个实体 - Product 和 Picture。这个想法是一个产品可以只有一张图片或没有图片,并且一张图片可以映射到许多产品。
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 实体只包含产品图片的映射),所以基本上它只包含两列身份证。
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 实体为空。我怀疑映射不正确。您能告诉我在检索 Product 实体时如何填充 Picture 实体吗?这是检索代码:
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;
}
}
我无法将 .Include("Picture") 添加到 Table,因为它是 IQueryable。 我也启用了延迟加载,但没有结果。
【问题讨论】:
-
能把_productRepository的代码贴出来吗?
-
我相信您禁用了延迟加载。看这篇文章,它向您展示了加载相关数据的不同方式:msdn.microsoft.com/en-us/library/vstudio/…
-
我开启了延迟加载,但没有任何效果。
标签: c# entity-framework asp.net-mvc-4 entity-framework-5