延迟加载的POCO实体、实体框架和WCF如何协同工作?
如果一个项目对实体使用POCO,并使用实体框架和延迟加载,那么您将得到一个“不完整”的对象图。那么,当客户机使用实体时,是否有某种代理自动加载剩余值?我们必须自己创建这个代理并将原始实体包装在其中吗?或者,是否有一种可接受的模式用于识别延迟加载类型,然后向客户端发送信号以再次调用WCF?使用平面DTO,您可能无论如何都不想向客户端公开您的整个域。WCF是基于消息的,而不是域驱动的。使用平面DTO,您可能不想向客户端公开您的整个域。WCF是基于消息的,而不是域驱动的。使用WCF的延迟加载通常不起作用,因为您的方法如下所示:延迟加载的POCO实体、实体框架和WCF如何协同工作?,wcf,linq-to-entities,lazy-loading,Wcf,Linq To Entities,Lazy Loading,如果一个项目对实体使用POCO,并使用实体框架和延迟加载,那么您将得到一个“不完整”的对象图。那么,当客户机使用实体时,是否有某种代理自动加载剩余值?我们必须自己创建这个代理并将原始实体包装在其中吗?或者,是否有一种可接受的模式用于识别延迟加载类型,然后向客户端发送信号以再次调用WCF?使用平面DTO,您可能无论如何都不想向客户端公开您的整个域。WCF是基于消息的,而不是域驱动的。使用平面DTO,您可能不想向客户端公开您的整个域。WCF是基于消息的,而不是域驱动的。使用WCF的延迟加载通常不起作
public List<MyPoco> GetData()
{
using (var context = new MyObjectContext())
{
return context.MyPocos.ToList();
}
}
public List GetData()
{
使用(var context=new MyObjectContext())
{
返回context.MyPocos.ToList();
}
}
正如您看到的,上下文在方法中是关闭的(您必须在某个地方关闭上下文)。但是当列表被序列化时,它将尝试延迟加载依赖对象=>exception,因为上下文已经关闭。在WCF中,您应该使用即时加载。使用WCF的延迟加载通常不起作用,因为您的方法如下所示:
public List<MyPoco> GetData()
{
using (var context = new MyObjectContext())
{
return context.MyPocos.ToList();
}
}
public List GetData()
{
使用(var context=new MyObjectContext())
{
返回context.MyPocos.ToList();
}
}
正如您看到的,上下文在方法中是关闭的(您必须在某个地方关闭上下文)。但是当列表被序列化时,它将尝试延迟加载依赖对象=>exception,因为上下文已经关闭。在WCF中,您应该使用即时加载。…即使上下文没有关闭,这仍然是一个坏主意。延迟加载对于分布式对象来说太过健谈。我们的问题是,我们有一些帐户有数千行项目。除非有人要求,否则我们不想跨线路序列化它。因此,您需要两个操作。一个有物品,一个没有items@uriDium您可以使用EF上的筛选器表达式来限制记录计数。然后,如果客户端需要,在服务上实现某种形式的分页功能,用于其他记录请求……即使上下文没有关闭,这仍然是一个坏主意。延迟加载对于分布式对象来说太过健谈。我们的问题是,我们有一些帐户有数千行项目。除非有人要求,否则我们不想跨线路序列化它。因此,您需要两个操作。一个有物品,一个没有items@uriDium您可以使用EF上的筛选器表达式来限制记录计数。然后在服务上实现某种形式的分页功能,以便在客户机需要时进行其他记录请求。