.NET ORM需要帮助

3

我已经准备好了一个包含简单表格(没有太多约束)的SQL Server数据库。现在,我需要为这些表格生成数据访问层(DAL)和对象类。

.NET ORM(如NHibernate或您建议的任何其他免费框架)可以帮助解决这个问题吗?基本上,它可以帮助简化编写类和数据库访问函数的繁琐任务,从而使我能够更好地专注于编写这些对象类的业务逻辑。

以后添加/修改表格会容易吗?我对ORM有概念性的了解,但没有使用过任何实际经验。

6个回答

3
你可以使用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选项在哪里。提供一些直接的步骤会很有帮助。 - Munish Goyal

1

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

SubSonic不是ORM,而是一个代码生成工具,可以为您生成DAL。

还有Entity FrameworkLinq to SQL(来自Microsoft),它们也可以在Visual Studio中提供设计表面,为您生成DAL。

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


SubSonic是一种ORM。如果您正确使用诸如部分类之类的工具,那么即使更改数据库,也不会丢失代码方面的更改。 - Michael Maddox

1

Linq2SqlEntity framework都可以在很大程度上帮助您解决这个问题。关于您关于更新表的问题:是的,稍后更新表格相当容易。至少比您手写所有内容要容易得多(在那种情况下,您也必须手动进行修改)。


有很多学习曲线吗?还是我可以直接开始使用?如何使用Linq2Sql生成类和数据访问层(它看起来比EF简单),它提供了什么工具? - Munish Goyal
1
@Munish Goyal:我认为学习曲线并不陡峭。是的,有一个工具。你只需要在Visual Studio中拖放你的表格。你所要做的就是在项目中添加一个“Linq2Sql数据类”文件,然后从“服务器资源管理器”中开始拖动表格。就这么简单。 - Klaus Byskov Pedersen
Linq2Sql数据类是一个.cs文件还是一个模板?请详细说明。这将会有帮助。 - Munish Goyal
@Munish Goyal:NHibernate与Linq2Sql没有任何关系,您可以单独使用Linq2Sql。您只能接受一个答案,所以只需选择一个即可。 - Klaus Byskov Pedersen
还有一件事。类对象是否与表记录紧密绑定?如果通过后门修改表记录会怎样?这个 Linq2Sql 类能处理所有这些情况吗?抱歉,问了这么多细节,但我需要快速决定。 - Munish Goyal
显示剩余4条评论

0

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

为了生成对象类,我建议使用T4模板。有各种在线可用的示例模板,并且编写自己的模板以完全满足您的需求相对简单。

还有一个好主意是让这些对象类作为数据容器,并在使用这些DAL类的单独类中实现业务逻辑。这将简化重新生成它们(如果底层表发生更改)的过程。


0

虽然我来晚了,但是Nuget和Github上的Cocoon ORM很不错。它可以动态地编写数据访问代码。http://guidelinetech.github.io/cocoon-orm/

以下是该网站上的功能列表:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接