【发布时间】:2011-06-04 00:35:00
【问题描述】:
我已经准备好带有简单(约束不多)表的 SQL Server 数据库。现在我需要为表生成 DAL 和对象类。
.NET ORM(如 NHibernate 或您建议的任何其他免费固件)在这方面有多大帮助?基本上帮助完成编写类和数据库访问功能的繁重任务。我会花时间为这些对象类编写业务逻辑。
以后添加/更改表格是否容易?我对 ORM 有概念性的想法,但没有使用任何实践经验。
【问题讨论】:
我已经准备好带有简单(约束不多)表的 SQL Server 数据库。现在我需要为表生成 DAL 和对象类。
.NET ORM(如 NHibernate 或您建议的任何其他免费固件)在这方面有多大帮助?基本上帮助完成编写类和数据库访问功能的繁重任务。我会花时间为这些对象类编写业务逻辑。
以后添加/更改表格是否容易?我对 ORM 有概念性的想法,但没有使用任何实践经验。
【问题讨论】:
您可以使用Linq to Sql 或Entity Framework 自动生成您的类以及数据访问功能。
您可以从 Visual Studio 中将数据库表拖放到 DBML (L2S) 或 EDMX (EF) 中,它会使用一对一映射到列的成员以及您拥有的任何关系来构建您的类已定义。
要创建Linq to Sql Classes 或ADO.NET Entity Data Model,请按以下步骤操作:
Linq to Sql Classes 或ADO.NET Entity Data Model
Server Explorer 打开与您的数据库的连接例如:
User变成类User
User 有列FirstName 它变成属性FirstName
User 与表Contact 有关系,它将在您的User 类上生成IList<Contact> Contacts。这将让您从生成的DataContext 中编写类似user.Contacts.Where(c => c.ContactId == 7000) 的代码
如果您需要更自定义的方式来映射您的表格,您可以使用SQLMetal,它也会生成您的类,但允许您进行更改。例如,将int 属性转换为enums。
NHibernate 也是一个不错的选择,并且已经取得了长足的进步。
【讨论】:
有许多工具可以为您生成 DAL。
SubSonic 不是 ORM,而是为您生成 DAL 的代码生成工具。
Entity Framework 和 Linq to SQL(来自 Microsoft)也会为您生成 DAL,并在 Visual Studio 中提供设计界面。
所有这些添加和更改表都需要重新生成 DAL,因此对这些文件的更改和自定义可能会丢失。
【讨论】:
Linq2Sql 和 Entity framework 都可以在很大程度上帮助您。关于您关于更新表格的问题:是的,以后更新表格很容易。至少比手动编写所有内容要容易得多(您也必须手动进行修改)。
【讨论】:
Nhibernate 将处理您的所有数据访问逻辑。 我建议您尽可能定义每个外键和主键。 使用显式主键而不是复合主键也更简单。
要生成对象类,我建议使用 T4 模板。网上提供了各种示例模板,编写自己的模板来做自己想做的事情相对简单。
让这些对象类充当数据容器并在使用这些 DAL 类的单独类中实现您的业务逻辑也是一个好主意。如果基础表发生更改,这将简化重新生成它们的过程。
【讨论】:
我有点晚了,但 Nuget 和 Github 上的 Cocoon ORM 很好。它动态地编写数据访问代码。 http://guidelinetech.github.io/cocoon-orm/
来自网站的以下功能列表:
【讨论】:
试试 Vega https://github.com/aadreja/vega。具有企业功能的最佳和最快的 .net ORM 之一。
【讨论】: