2010-09-02 35 views
2

当我开始用asp.net编写web应用程序时,我开始使用Linq-To-SQL映射器来访问MSSQL Server的小型项目。
获得一定的成绩后,我转入了经典的3层,包括图形层,业务层,数据层。数据层的唯一功能是提供插入/更新/删除方法,没有任何逻辑和逻辑选择方法的形式。如何将我的业务层对象映射到数据库中?是否是O/R映射器的时间?

过了一段时间,我意识到最好不要将数据库类提供给GUI(不幸的是花了一些时间)。我开始在BL中使用Business类,这些类用于BL执行的所有操作,并由GUI以获取BL中的List的形式显示。
一个很大的优点是我可以提供其他属性,这些属性不是由数据库本身表示的。然而,我在BL里面用映射相应的BL类到数据库类的方法进行了映射。

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

有没有办法自动实现映射?如果是的话,是新的实体框架提供了什么,或者我需要寻找像NHibernate一样的O/R映射器?

回答

2

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

如果你认真对待你的手脏ORM(但相对较新的那个区域),我强烈建议像TekPub的视频上这些话题。您将能够从头开始查看这些工具的使用情况。这是对你提到的一些简单而现实的问题的优雅介绍。

3

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

NHibernate有一个陡峭的学习曲线,但是当你过去时 - 它确实是一帆风顺的。当(如果)你冒险的方式NHibernate,检查出Ayende酷技巧。

+0

AR是好的,如果你确定你永远不想以任何其他方式做ORM。剥离AR实现,尤其是装饰器,退出你的领域是一件非常痛苦的事情。我通常更喜欢Repository模式;另一方面的ORM可以是任何你想要的,从一个自己存储的proc系统到Linq2SQL到NHibernate到EF,如果你已经很好地构建了你的IRepository接口,你的代码将永远不会知道它们的区别。 – KeithS 2010-09-03 00:32:31

0

我用了Entity Framework 4.0(+ CTP)很愉快。我想你会更容易处理这样的ORM。 EF4提供的一切您需要与C#/ .NET中的MSSQL进行互操作。您不必编写一行SQL,并且它完全支持LINQ(通过ObjectQuery)。

0

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

这里有一些事情你应该了解,以帮助给你额外的背景: