所以基本上我想出了一个半家庭成长的解决方案,以延迟加载基本上已生成的属性是私人的,并有一个公共财产,处理与是否加载生成的属性:实体框架:问题与延迟加载“解决方案”(不问如何做懒惰加载)
:public ChatRoom ParentRoom
{
get
{
if(!ParentRoomInnerReference.IsLoaded)
{
ParentRoomInnerReference.Load();
}
return ParentRoomInner;
}
set
{
ParentRoomInner = value;
}
}
现在,这与类查询效果很好用类似(因为我有在部分类扩展生成的类的所有“查询”用)
context.Items.Where(ParentRoomInner.Id = someId).ToList();
由于此方法位于Item类中,因此它可以运行此就好在那里,它不能做的:
context.Items.Where(ParentRoom.Id = someId).ToList();
由于实体框架无法弄清楚,代理财产,以产生什么表情。这真的成为一个问题是说,我正在尝试计算一个房间的所有帖子(项目),并且我想要Room类上的该方法。
public Int32 GetPostCount()
{
return EntityContext.Context
.ChatItems
.Count(item => item.ParentRoom.ChatRoomID == ChatRoomID); //Boom
}
Item类,我不能在项目类中使用ParentRoom(代理)属性中同样的原因,我不能在这个查询客房类中使用它。实体框架无法弄清楚该属性。
现在的问题是,是否有某种属性我可能能够标记ParentRoom属性,以便它知道是指ParentRoomInner属性,因此可以知道如何处理它时分解表达式?
我能想到的唯一其他替代方案是将生成的属性设置为内部,并让Room类查询使用ParentRoomInner属性(meh)或将方法(如GetPostCount方法)移动到Item类,并且只需将GetPostCount方法Room类指向它。 (不可怕,但只是双打一种方法)
遗憾的是,经过彻底搜索,我认为你是对的。 – 2009-07-03 15:36:35