【发布时间】:2015-02-07 09:30:29
【问题描述】:
我的问题有点难以解释,所以请耐心等待,我会尽力解释并提供尽可能多的信息。
所以我有两张桌子:
[Table("Items")]
public class Item : BaseModel
{
[Key]
[Column("Id")]
public Guid Id { get; set; }
[Column("DescriptionId")]
public Guid DescriptionId { get; set; }
[ForeignKey("Id")]
public LanguageText LanguageText { get; set; }
[ForeignKey("DescriptionId")]
public LanguageText DescriptionText { get; set; }
}
[Table("Shops")]
[Serializable]
public class Shop: BaseModel
{
[Key]
[Column("Id")]
public Guid Id { get; set; }
[Column("ItemId")]
public Guid? ItemId{ get; set; }
[Column("Closed")]
public DateTime? Closed{ get; set; }
[ForeignKey("ItemId")]
public Item ItemModel{ get; set; }
}
我的查询
var items= itemRepository.GetAll()
.Include(x => x.LanguageText)
.Include(x => x.DescriptionText);
var querableShops = shopRepository.GetAll()
.Where(x =>!x.Closed.HasValue || (x.Closed.HasValue && x.Closed.Value >= Expiration))
.GroupJoin(items, s => s.ItemId, i => i.Id, (x, y) => x);
当我进行查询时会发生有趣的事情。当我调试 querableShops 并想要检查我的 ItemModel 时,它为空,除非我首先展开项目的结果视图。因此,我的项目不会显示在数据网格中,除非我事先在调试中手动检查项目。我认为问题在于我的项目是 IQueryable,我确实尝试将其转换为 IEnumerable,但这也没有解决我的问题。
【问题讨论】:
-
GetAll会发生什么?存储库是否共享相同的上下文? -
GetAll() 返回 DBSet。是的,存储库位于相同的上下文中
-
我认为您的项目中启用了延迟加载,因此您需要急切地加载它们,因此将它们转换为 ToList() 会有所帮助。 db.itemRepository.Include(x => x.LanguageText) .Include(x => x.DescriptionText) .ToList();
标签: entity-framework ienumerable iqueryable outer-join