0

我正在使用实体框架,但我缓存了一些应用程序范围的实体,所以现在它们是列表而不是实体。

我缓存的两个对象是产品和商店——一个产品有一个商店。在表中,它们由 StoreId 链接,但由于我使用的是 EF,因此 Product 还可以包含 Store 实体。

我不会仅仅因为它们也被独立使用而将它们缓存在一起。我想做的是在某个时候加入它们,所以我可能会选择 Product 对象,然后想通过加入 Stores 对象来填充 Stores。

是使用 linq 加入 2 个列表的最有效方法 - 如果是,那么最有效的语法是什么,或者是否有更好的方法将列表转换回实体。

4

2 回答 2

2

有没有更好的方法将列表转换回实体

这有点误导,因为这不是你想要做的。您拉下作为实体的产品/商店列表 - 无需转换它们(即使您将它们存储在列表中)。

如果我理解正确,您想要做的基本上是将每个映射Product到缓存实体中的适当位置(通过访问实体上的属性Store来保存返回数据库)。我很确定您需要做的就是将其映射出来,例如:StoreProduct

foreach (var product in cachedProducts)
{
    product.Store = cachedStores.SingleOrDefault(s => s.Id == product.StoreId);
}
于 2012-08-21T11:02:41.560 回答
1

您的实体通过底层数据库上下文连接,因此从该上下文中删除它们可以防止您稍后将它们重新加入,甚至在不附加上下文的情况下保存它们。

最有效的设计是使用 EF 的 IQueryable 语法在需要时检索它们,并让数据库上下文执行所需/可能的任何缓存。

于 2012-08-21T10:56:35.567 回答