2009-08-02 81 views
5

我想学习Asp.net Mvc,所以我尝试了 this教程。Asp.net Mvc:使用LINQ to SQL创建模型类

他们讨论了Repository模式,以及如何轻松地转换为另一种数据访问技术,而不是直接调用Linq to Sql。

在控制器类中使用LINQ to SQL使得将来很难切换数据访问技术。例如,您可能决定从使用Microsoft LINQ切换到SQL以将Microsoft Entity Framework用作数据访问技术。在这种情况下,您需要重写每个访问应用程序内数据库的控制器。

注意:在阅读本教程之前,我从来没有真正理解接口是如何工作的,但它仍然不是100%清晰。我现在将它看作某种类的“模板”。

成功使用Linq to Sql后,我认为试试Ado.net Entity Framework会很好,因为我已经阅读了很多关于这方面的内容。他们说使用Repository模式可以很容易地切换,所以我想我会测试它。

我的问题是:我应该怎么做才能更改为Ado.net EF?

这是我认为我应该做的。

  • 添加Movie.edmx文件,并配置它(加我的电影表)。
  • 编写基于该IMovieRepository一个新的类,也许称之为MovieEFRepository。
  • 将控制器构造函数中的参数更改为MovieEFRepository。这是我发现的第一件奇怪的事情,因为在本教程中他们说如果您更改为其他数据源,则不使用存储库会强制您更改所有控制器。无论如何,我不需要改变每一个控制器,因为我指定了MovieRepository类。
  • 我认为我需要做的最后一次调整是更改视图。因为它使用由Linq to Sql设计器创建的Product类。我不知道我将如何去做这件事。我想我应该使用一些不依赖于dbml文件的对象?

请原谅我,如果我有一个简单的Asp.net Mvc视图。我是一个webdesigner,对Asp.net的web开发很感兴趣。

+1

不错的问题。 – 2009-08-02 01:04:43

回答

1

你可能也有仓库脱钩,因为注射的,如果你不遵循,因为

public MoviesController() : this(new **MovieRepository**())

我建议你阅读有关IOC只是例子,是很容易的,非常有趣,你可以使用和ioc容器,如城堡温莎。

这样,你的控制器将只有一个构造函数,一个接口,而不需要改变。

对于您的实体,您可以使用与控制器相同的操作,为每个实体创建一个接口并使用ioc模式,只需要更改ioc容器的配置文件即可。

如果你不做这些事情,你的权利,你需要改变你所说的一切。

我希望有所帮助!对不起我的英语!

+0

你好,谢谢你的答案。我正在阅读有关国际奥委会(这令人惊讶的不是国际奥委会!),似乎这是一条路。我对IoC的理解是,您可以告诉它为特定接口使用特定的类,并且因为这些设置存储在单独的文件中,所以很容易进行全局调整。唯一令我困扰的是我需要一个额外的IoC框架,并且还有不止一个框架。 无论如何,再次感谢您的答案。 – Pickels 2009-08-02 17:46:03

6

因此,经过几天的阅读和大量的谷歌搜索,我得到了它的工作。首先,我试图找出IoC(控制反转)究竟意味着什么。

我发现的第一个网站之一是一个关于Unity的截屏视频。这是一个用于.Net的DI/IoC框架。

望着那现在这其实是一个很不错的截屏,并例如在它是多么容易使用统一和IOC/DI。当时我完全不理解它,所以我继续搜索,并一直在搜索。

我一直在遇到的一个网站是来自Martin Fowler的网站。

对我来说,一个人是新手,这个网站的编码是有点抽象。这也许听起来很奇怪,但该网站上的字体,行高和版式非常糟糕,这使得它更难以阅读。

我读到的下一个网站是关于温莎城堡,因为阿尔弗雷多费尔南德斯说它很容易使用。

的文件是不坏,但我遇到了一些问题,他们的转换“入门”基本的例子,我的Asp.net MVC应用程序。第2部分和第3部分在他们入门时不见了。

之后,我开始寻找不同的框架,看看我能否找到一个非常基本的例子。如果我只是再看第一个截屏视频,我会早点修复它,但不知何故我失去了它的踪迹。

我有很多xml配置文件的问题,我似乎无法让他们工作。我尝试过Windsor,Structure Map和Spring.net,但我总是被xml文件困住。

所以我决定去Asp.net的mvc网站,因为那是我开始学习Asp.net了MVC。我发现第一个截屏视频和MIX09演示非常清晰,我理解了大部分人正在讨论的内容。在构建店面应用程序时,我被Rob Conery第二次截屏。因为我现在知道更多关于存储库和IOC/DI的信息,所以我认为再次开始观看Rob Conery的屏幕录像是个好主意。在其中一个屏幕录像中,他谈到了将所有样本上传到codeplex。

我去CodePlex上,并发现可以通过源文件浏览,无需下载它们。我试图找出Rob Conery如何用他的存储库处理IOC/DI。所以我很高兴看到他使用Structure Map,而不是使用xml配置文件,而是使用引导程序类将所有接口注册到具体类。

与我的web应用试图在这之后我finaly能得到结构映射在我的应用程序工作(万岁)。

他还向我展示了如何解决来自Sql的Linq对我的产品类的依赖。他创建了一个额外的对象,然后通过Linq查询中的“select new product {}”进行调用。

哇,这个答案是比我计划的时间稍长,但我希望这可以帮助其他人喜欢我,谁是在编码和Asp.net的mvc非常新手。