我正在使用Entity Framework,但我已经缓存了一些应用程序范围的实体,所以现在它们是List而不是实体。
我缓存的两个对象是产品和商店 - 产品有商店。在表中,它们由StoreId链接,但由于我使用的是EF,因此产品也可以包含商店实体。
我不会将它们一起缓存,因为它们也是独立使用的。我想要做的是在某个时候加入它们,所以我可以选择Product对象,然后通过加入Stores对象来填充Stores。
使用linq加入2个列表的最有效方法 - 如果是最有效的语法,或者将列表转换回实体是更好的方法。
答案 0 :(得分:2)
是否有更好的方法将列表转换回实体
这有点误导,因为这不是你想要做的。您下拉了一个产品/商店列表,这些产品/商店是实体 - 无需转换它们(即使您将它们存储在列表中)。
如果我理解你想要做的事情,基本上是将每个Product
从缓存的实体映射到适当的Store
(通过访问Store
来保存回到数据库Product
实体上的属性)。我非常确定您需要做的就是将其映射到这一点,例如:
foreach (var product in cachedProducts)
{
product.Store = cachedStores.SingleOrDefault(s => s.Id == product.StoreId);
}
答案 1 :(得分:1)
您的实体通过底层数据库上下文连接,因此从这个上下文中删除它们会阻止您以后加入它们甚至保存它们而不附加上下文。
最有效的设计是使用EF的IQueryable语法在需要时检索它们,并让数据库上下文执行所需/可能的任何缓存。