EF inclue
EF我关闭了延时加载
现在需要另外一个表
产品表 产品图片mapping表 图片表
搜索产品的时候 怎么include到图片表
------解决方案--------------------你的意思是不是
- 关闭了 LazyLoading
- 你有 3个表,他们的关系是
Product 1 --- * ProductImages * --- 1 Images
- 你想知道怎么读取 Images 的数据?
因为你没有讲清楚你的架构,所以很难给一个完整的答复。
你的 EDMX 里面应该已经有了那些 association, 你的问题最终是在于,你可能有一个
GetProduct(long productId) : Product
但是当你想要读取 Product.ProductImages 的时候,这个是没有的
那么你可以直接在你的 GetProducts 里面先读了就是
方法有很多,比如
Product GetProduct(long productId)
{
var query = from p in context.Products where p.ProductId == productId select p;
Product retval = query.FirstOrDefault();
if (retval != null)
{
// 这个方法会 create many db round trips
if (retval.ProductImages.IsLoaded == false)
{
retval.ProductImages.Load();
retval.ProductImages.Forreach(e=>e.Image.Load());
}
// 这个方法会比较好
var imageQuery = from i in context.Images
where i.ProductImages.ProductId == productId
select i;
// 如果你关闭了 lazy loading, 这个会自动加载到相关的 entity 里面,所以不需要赋值
imageQuery.ToList();
}
// 你可以直接写 include, 类似
var query2 = from p in context.Products.Includes("ProductImages").Include("ProductImages.Images") where p.ProductId == productId select p;
// 虽然这样只会有一次 db round trip,但实际上并不推荐。关键是你的表里有多少数据,这样一个 join 可能会比上面我推荐的那个方法消耗更大
}
当然还有其他的写法,你自己去捉摸吧