.net - 本土 ORM 与 DataTables?

标签 .net orm datatable

这是对问题的简化(有很多做事的方法),但是在需要与数据库通信的应用程序中,我通常会看到以下两种模式之一:

  • 对象关系映射 (ORM),其中(通常)数据库中的每个表都有一个相应的“行包装器”类,该类具有与表中的列匹配的公共(public)属性。有时这些类也会自动检索相关信息,以便外键列可以改为公开并显示为相关数据(而不仅仅是 PK 值)。
  • 数据表(和/或数据集),其中数据作为数据表从服务器检索并以该形式(甚至在 UI 中)使用。

  • 这两种方法之间的主要区别之一是 ORM 允许您在代码中引用强类型字段,如下所示:
    Person bob = new Person();
    bob.FirstName = "Bob";
    collectionPeople.Add(bob);
    

    而使用 DataTable 方法,您的代码将类似于:
    DataRow newrow = datatablePeople.NewRow();
    newrow["FirstName"] = "Bob";
    datatablePeople.Rows.Add(newrow);
    

    在这种情况下,ORM 方法受益于编译时检查,而 DataTable 方法则没有。另一方面,DataTable(和 DataSet)是已经编写好的数据结构,可以很好地直接表示关系数据,因此使用它们的代码通常可以更快地实现。此外,使用 DataTables 的代码很容易被他人理解和修改;本土(通常是 COTS)ORM 系统通常会“在后台”进行额外的数据库访问以填充外键等,这可能会给不知情的人带来问题。

    那么您通常喜欢哪种方法,为什么?

    最佳答案

    Datatable 在处理数据时在概念上肯定会更直接。而且它没有您在 ORM 中发现的有时不自然的习语。 (在更新之前将记录查询到本地内存中;连接是指针;键值本身是指针,因此,添加记录需要加载父记录)

    ORM 的一大优势是……

    1)它为你写了sql,所以你真的不需要写任何sql来做基本的crud。当然,编写更复杂的语句必须使用功能较弱的子语言(即 hql)

    2) ORM 的另一大优势是当您返回结果时,它会将其映射到值对象中,而无需编写一堆代码来映射值和处理类型转换。

    如果你有很强的 sql 技能但想要覆盖优势 2,我会选择 ibatis

    关于.net - 本土 ORM 与 DataTables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/271806/

    相关文章:

    c# - 以编程方式从 Entity Framework 6 的对象上下文中获取有关索引和约束的元数据

    .net - 在.net c++托管代码下使用STL是不可能的吗?

    .net - NHibernate 和 WCF 一起使用时需要注意什么?

    java - 为什么使用 Hibernate 和 Oracle 10g 方言通过 JPA 创建名为 hibernate_sequence 的序列?

    c# - 将类型作为参数传递给 LINQ Field 方法

    .net - Dns.GetHostEntry错误情况及解决方法

    .net - xsl :template match doesn't find matches

    node.js - 查询中的序列化查询

    .net - 为数据表中的所有行设置值,无需 for 循环

    c# - 如何制作 C# DataTable 过滤器