对于我的项目,我使用SqlCE 3.5,Linq2Sql并使用SqlMetal生成实体类(dbml文件)。
如果我使用实体类的扩展作为我的业务对象类,我该如何处理子对象?
我可以使用dbml文件中已有的现有EntitySet(Of ChildClass)吗?或者我应该在我的部分类扩展中创建一个新的集合属性,例如:
public partial class ParentClass
{
public List<ChildClass> children { get; set; }
}
我有一个模糊的假设,即EntitySet(Of ChildClass)与完整的数据库表有某种类型的直接连接。而且我或许应该将它用作纯粹的数据访问对象,对于业务逻辑,我应该保留另一个只能保存表的子集的集合对象。
但我不确定我是否完全误解了这个概念?我真的很想知道应该如何正确使用..?
EDIT1:
对我来说可能是性能问题的一件事是将我的对象集绑定到datagridview。从股票交易所数据源中经常更新一些属性,我想知道使用EntitySets作为业务层集合是否会使这种情况变得缓慢。虽然我不会在这些更新上调用submitchanges 。由于所有更新,我仍然无法滚动datagridview。可能这是因为使用EntitySets,或者只是datagridview本身更新频繁,滚动似乎不可能?
答案 0 :(得分:0)
如果您使用的是Designer生成的实体,它们是代理而非真正的POCO对象,您还可以使用它们的ObjectSet来获取子集合。它们的类型为IQueryable,因此在您触摸其中一个项目或使用ToList()或.Where()LinQ扩展名之前,EF将不会调用数据库。 无论如何,最佳实践是使用IList公开它们并使用存储库来填充列表。 ObjectSet不仅是List,它还是实体的一种存储库。