读书人

EF inclue解决方法

发布时间: 2013-02-25 10:23:36 作者: rapoo

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 可能会比上面我推荐的那个方法消耗更大
}

当然还有其他的写法,你自己去捉摸吧

读书人网 >.NET

热点推荐