繁体   English   中英

如何改进映射到数据库的业务层对象? 是时候使用 O/R 映射器了吗?

[英]How can I improve my business layer objects mapping into a database? Is it time for a O/R mapper?

当我开始使用 ASP.NET 编写 Web 应用程序时,我从使用 Linq-To-SQL 映射器来访问 MSSQL 服务器的数据库的小项目开始。
在积累了一些经验后,我转而采用经典的三层方法,即图形层、业务层和数据层。 数据层的唯一功能是提供没有任何逻辑的插入/更新/删除方法和逻辑选择方法的形式。

随着时间的推移,我意识到最好不要向 GUI 提供数据库类(不幸的是,花了一些时间)。 我转而使用 BL 中的业务类,这些业务类用于 BL 执行的所有操作,并以从业务层获取 List 的形式由 GUI 显示。
一个很大的优势是我可以提供数据库本身没有表示的其他属性。 但是,我自己在业务层内部使用将相应业务层类映射到数据库类的方法进行了映射。

我想这就是 O/R 映射器派上用场的地方? 直到现在,我还没有意识到他们的目的,但我想我刚刚找到了。 我最近尝试在 .NET Framework 4 中使用新的实体框架,但我只是像使用 Linq-To-SQL DataContext 一样使用它。

有没有办法自动实现映射? 如果是,那是新实体框架提供的,还是我需要寻找像 NHibernate 这样的 O/R 映射器?

我只在我的项目中使用 NHibernate。 我喜欢它给我的控制力和灵活性。 有一个名为Active Record的“快捷方式”,它在幕后使用 NHibernate,但为 NHibernate 提供了一个非常好的简单界面。

NHibernate 有一个陡峭的学习曲线,但是当你通过它时 - 它真的是一帆风顺。 当(并且如果)您冒险使用 NHibernate 的方式时,请查看Ayende以获得很酷的提示。

(实体框架一个 O/R 映射器。)

如果您真的很想接触 ORM(但在该领域相对较新),我强烈推荐类似 TekPub 的关于这些主题的视频的内容。 您将能够从头开始使用这些工具。 它优雅地介绍了一些简单但真实的问题,例如您提到的问题。

我在使用 Entity Framework 4.0(+ CTP)时玩得很开心。 我认为你会更轻松地处理这样的 ORM。 EF4 提供了与 C#/.NET 中的 MSSQL 进行互操作所需的一切 您不必编写一行 SQL,并且它完全支持 LINQ(通过 ObjectQuery)。

LinqToSql 是一个 ORM,所以您已经在使用它了。 取出 LinqToSql 并用 EntityFramework 或 NHibernate 替换它并不能解决您现在似乎遇到的问题。

以下是一些您应该了解的更多信息,以帮助您提供更多背景信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM