【问题标题】:Linq-to-Sql, Use of entity classes and parent/child objectsLinq-to-Sql,实体类和父/子对象的使用
【发布时间】:2011-01-14 02:34:00
【问题描述】:

对于我的项目,我使用 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。由于所有更新,我仍然无法滚动数据网格视图。这可能是由于使用了 EntitySets,或者只是 datagridview 本身更新得太频繁以至于滚动似乎不可能?

【问题讨论】:

    标签: c# database linq-to-sql entity


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我希望我能完全理解你的意思;使用“使用 IList 公开它们并使用存储库填充列表”,您的意思是类似于本示例的第一个代码部分 (mikehadlow.blogspot.com/2008/03/…),但在该示例中返回 IList 而不是 IQueryable ?
    • 如果每次将 Linq 过滤器应用于列表时都返回 IQueryable,例如 Where、Distinct 等...它将回调 EF 和数据库
    • 我明白了。现在一直在阅读 POCO、DTO、存储库等。所以开始更好地了解情况。将不得不找出我是否应该完全解耦它,或者只是小心如何调用 EntitySets。
    • 我会说这取决于您拥有的实体数量,以及它是否是您做的第一个项目。如果您是该主题的新手,请慢慢来,不要尝试第一次做所有事情,否则会太多! PS:如果你认为答案是正确的,你必须打勾。
    • 是的,好点。这是我第一次使用数据库,10-15 个表。 1 层,单用户。但是由于套接字数据馈送的多个线程。到目前为止,拥有使用 Linq2Sql 进行数据访问的存储库以及返回域对象类型的映射可能是合适的。不确定我是否喜欢将 EntitySets 拖到任何地方的想法,所以这可以避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多