2011-01-14 62 views
0

对于我的项目,我使用SqlCE 3.5,Linq2Sql并使用SqlMetal生成实体类(dbml文件)。Linq-to-Sql,使用实体类和父/子对象

如果我使用实体类的扩展作为我的业务对象类,我该如何处理子对象?

我可以使用已存在于dbml文件中的现有EntitySet(Of ChildClass)吗?或者我应该在我的部分类扩展创建一个新的集合属性,如:

public partial class ParentClass 
{ 
public List<ChildClass> children { get; set; } 
} 

我得到这个模糊的假设的EntitySet(中ChildClass)具有某种类型的直接连接到完整的数据库表。而且我也许应该将它用作纯粹的数据访问对象,对于业务逻辑,我应该保留这个只能包含表的子集的其他集合对象。

但我不确定我是否完全误解了这个概念?我真的很想知道这应该如何正确使用..?


EDIT1:

一件事,可能是我的一个性能问题是结合我的对象集合到一个DataGridView时。一些属性更新频繁,从股票交换数据馈送,我不知道是否使用EntitySets作为业务层集合使这慢。虽然我不要求那些更新提交更改。由于所有更新,我仍然无法滚动datagridview。这可能是由于使用EntitySets,或者仅仅是datagridview本身更新频繁,以至于滚动看起来不可能?

回答

0

如果您使用Designer生成的实体,它们是代理服务器而不是真正的POCO对象,那么您也可以使用它们的ObjectSet来获取子集合。它们是IQueryable类型的,所以在触摸其中一个项目或者使用ToList()或.Where()LinQ扩展之前,EF不会调用数据库。 无论如何,最佳实践是使用IList公开它们并使用存储库来填充列表。 ObjectSet不仅是一个List,它也是该实体的一种存储库。

+0

谢谢!我希望我明白你的意思;使用“使用IList公开它们并使用存储库来填充列表”,您的意思是像本示例的第一个代码部分(http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with -linq-to.html),但返回IList而不是该示例中的IQueryable? – bretddog 2011-01-14 03:12:42