【问题标题】:.NET ORM help needed.NET ORM 需要帮助
【发布时间】:2011-06-04 00:35:00
【问题描述】:

我已经准备好带有简单(约束不多)表的 SQL Server 数据库。现在我需要为表生成 DAL 和对象类。

.NET ORM(如 NHibernate 或您建议的任何其他免费固件)在这方面有多大帮助?基本上帮助完成编写类和数据库访问功能的繁重任务。我会花时间为这些对象类编写业务逻辑。

以后添加/更改表格是否容易?我对 ORM 有概念性的想法,但没有使用任何实践经验。

【问题讨论】:

    标签: .net orm


    【解决方案1】:

    您可以使用Linq to SqlEntity Framework 自动生成您的类以及数据访问功能。

    您可以从 Visual Studio 中将数据库表拖放到 DBML (L2S) 或 EDMX (EF) 中,它会使用一对一映射到列的成员以及您拥有的任何关系来构建您的类已定义。

    要创建Linq to Sql ClassesADO.NET Entity Data Model,请按以下步骤操作:

    • 在 Visual Studio 中右键单击您的一个项目
    • 添加 = > 新项目
    • 选择Linq to Sql ClassesADO.NET Entity Data Model
    • 这将创建一个空白设计视图,用于创建和自定义您的类。
    • 用户 Server Explorer 打开与您的数据库的连接
    • 将表格拖放到 DBML 或 EDMX 画布上,完成后保存。

    例如:

    • User变成类User
    • 如果表User 有列FirstName 它变成属性FirstName
    • 如果表User 与表Contact 有关系,它将在您的User 类上生成IList<Contact> Contacts。这将让您从生成的DataContext 中编写类似user.Contacts.Where(c => c.ContactId == 7000) 的代码

    如果您需要更自定义的方式来映射您的表格,您可以使用SQLMetal,它也会生成您的类,但允许您进行更改。例如,将int 属性转换为enums


    NHibernate 也是一个不错的选择,并且已经取得了长足的进步。

    【讨论】:

    • 拖放到 DBML 中? VS 中 DBML 的选项在哪里。需要遵循的直接步骤很少。
    【解决方案2】:

    有许多工具可以为您生成 DAL。

    SubSonic 不是 ORM,而是为您生成 DAL 的代码生成工具。

    Entity FrameworkLinq to SQL(来自 Microsoft)也会为您生成 DAL,并在 Visual Studio 中提供设计界面。

    所有这些添加和更改表都需要重新生成 DAL,因此对这些文件的更改和自定义可能会丢失。

    【讨论】:

    • SubSonic 是一个 ORM。如果您正确使用部分类之类的东西,则可以更改数据库而不会丢失代码方面的更改。
    【解决方案3】:

    Linq2SqlEntity framework 都可以在很大程度上帮助您。关于您关于更新表格的问题:是的,以后更新表格很容易。至少比手动编写所有内容要容易得多(您也必须手动进行修改)。

    【讨论】:

    • 是否有很多学习曲线或者我可以简单地开始使用?我如何使用 linq2sql 生成类和 DAL(它看起来比 EF 更简单),它提供任何工具吗?
    • @Munish Goyal:我不认为学习曲线非常陡峭。是的,有一个工具。您只需在 Visual Studio 中拖放表格即可。您所要做的就是将“Linq2Sql 数据类”文件添加到您的项目中,然后开始从“服务器资源管理器”中拖动表格。就这么简单。
    • “Linq2Sql 数据类”文件? .cs 文件或模板?请详细说明。希望有帮助
    • 太棒了。谢谢。我是否需要为任何相关功能尝试 NHibernate 或者这个 linq2sql 就足够了?此外,我想同时接受你的答案和下面一个@Hunter@ 怎么做?
    • @Munish Goyal:NHibernate 与 Linq2Sql 没有任何关系,您可以单独使用 Linq2Sql。您只能接受一个作为答案,因此请选择一个。
    【解决方案4】:

    Nhibernate 将处理您的所有数据访问逻辑。 我建议您尽可能定义每个外键和主键。 使用显式主键而不是复合主键也更简单。

    要生成对象类,我建议使用 T4 模板。网上提供了各种示例模板,编写自己的模板来做自己想做的事情相对简单。

    让这些对象类充当数据容器并在使用这些 DAL 类的单独类中实现您的业务逻辑也是一个好主意。如果基础表发生更改,这将简化重新生成它们的过程。

    【讨论】:

      【解决方案5】:

      我有点晚了,但 Nuget 和 Github 上的 Cocoon ORM 很好。它动态地编写数据访问代码。 http://guidelinetech.github.io/cocoon-orm/

      来自网站的以下功能列表:

      • 将数据库字段自动映射到域对象属性
      • AutoCrud 在获取(选择)时自动创建联接
      • 将域对象属性自动映射到存储过程参数
      • 动态创建易于检查的参数化 SQL,执行计划和缓存友好
      • 使用类似于实体框架的简单数据注释
      • 回归和基准测试工具,适合真正的偏执狂(比如我们)
      • 在代码优先环境中使用的表生成工具
      • 在代码第二环境中使用的类生成工具
      • 使用随附的 Comb GUID 或顺序 UID 生成器轻松创建非整数顺序唯一 ID。
      • 兼容 SQL Server 2008/2012/20014/+ 和 Azure SQL(适用于其他 TSQL 数据库)
      • 在弱版权 LGPL 许可下在您自己的专有代码中使用 Cocoon ORM 库(对 Cocoon ORM 本身的更改必须是 共享。请让我们知道,以便我们一起思考!)

      【讨论】:

        【解决方案6】:

        试试 Vega https://github.com/aadreja/vega。具有企业功能的最佳和最快的 .net ORM 之一。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 2022-01-04
          • 2017-10-05
          • 2017-03-23
          相关资源
          最近更新 更多