ASP.NET MVC: 使用 LINQ to SQL 创建模型类

5
我正在尝试学习Asp.net Mvc,所以我正在尝试使用此教程this
他们谈论了仓储模式,以及如何轻松更改为其他数据访问技术,而不仅仅是直接调用Linq to Sql。
引用块中说:“在控制器类中使用LINQ to SQL会使将来切换数据访问技术变得困难。例如,您可能决定从使用Microsoft LINQ to SQL切换到使用Microsoft Entity Framework作为数据访问技术。在这种情况下,您需要重写应用程序中访问数据库的每个控制器。”
注意:在阅读本教程之前,我从未真正理解接口的工作方式,现在仍不完全清楚。我现在将其视为类的某种“模板”。
成功使用Linq to Sql后,我认为尝试Ado.net Entity Framework会很好,因为我一直在阅读相关信息。他们说使用仓储模式可以轻松切换,因此我想测试一下。
我的问题是:我应该怎么做才能切换到Ado.net EF?
以下是我认为应该做的。
  • 添加Movie.edmx文件并配置它(添加我的电影表)。
  • 基于IMovieRepository编写一个新类,可能称之为MovieEFRepository。
  • 更改控制器构造函数中的参数为MovieEFRepository。这是我发现的第一件奇怪的事情,因为在教程中他们说如果不使用存储库将会强制您更改所有控制器,如果更改到其他数据源。但既然我正在指定MovieRepository类,难道我不需要更改每个控制器吗?
  • 我认为我需要做的最后一个调整是更改View。因为它使用由Linq to Sql设计师创建的Product类。我不确定我该如何做。我想我应该使用一些不依赖于dbml文件的对象吗?

如果我对Asp.net Mvc有稍微简单化的看法,请原谅。我是一名网页设计师,对Asp.net Web开发非常感兴趣。

2个回答

6

经过几天的阅读和大量搜索,我终于让它工作了。首先,我尝试找出IoC(控制反转)实际上是什么意思。

我发现的第一个网站是一个关于Unity的屏幕录像的网站。这是一个用于.Net的DI/IoC框架。

现在看来,这实际上是一个非常好的屏幕录像和示例,可以很容易地使用Unity和IoC/DI。当时我并没有完全理解它,所以我继续搜索。

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

对于我这样一个编码新手来说,这个网站有点抽象。而且这可能听起来很奇怪,但那个网站的字体、行高和排版真的很糟糕,这使得阅读更加困难。

我接下来阅读的一个网站是关于Windsor Castle的,因为Alfredo Fernández说它很容易使用。

文档还不错,但我在将他们的“入门”基本示例转换为我的Asp.net Mvc应用程序时遇到了一些问题。此外,“入门”的第2和第3部分也缺失了。

在这之后,我开始寻找不同的框架,看看是否能找到一个非常基本的示例。如果我只再次查看第一个屏幕录像,我会更快地解决它,但不知何故,我迷失了方向。

我在xml配置文件上遇到了很多问题,似乎无法让它们正常工作。我尝试了Windsor、Structure Map和Spring.net,但总是卡在xml文件上。

因此,我决定去Asp.net Mvc网站,因为那是我开始学习Asp.net Mvc的地方。我发现第一批视频和MIX09演示非常清晰,我理解了大部分人所说的内容。当我在Rob Conery的第二批视频中构建Storefront应用程序时遇到了困难。因为我现在对存储库和IOC/DI有了一些了解,所以我认为重新观看Rob Conery的视频是一个好主意。在其中一段视频中,他谈到了如何上传所有示例到codeplex。

我去了codeplex,并发现可以在不下载它们的情况下浏览源文件。我试图找出Rob Conery如何处理存储库的IOC/DI。所以我很高兴看到他正在使用Structure Map,但是他没有使用xml配置文件,而是使用了一个引导程序类,将所有接口注册到它们的具体类中。

在我的Web应用程序中尝试这个方法后,我终于能够让Structure Map在我的应用程序中正常工作(万岁)。

他还向我展示了如何修复来自Linq to Sql的Product类的依赖关系。他创建了一个额外的对象,然后在Linq查询中通过“select new product { }”调用它。

哇,这个回答比我预想的要长一些,但我希望这能帮助像我一样对编码和Asp.net Mvc非常新手的人。


1

你可能已经因为注入而使你的存储库解耦,如果你只是按照示例操作,那就不会出现这种情况。

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

我建议你阅读一下关于IOC的内容,它很容易理解并且非常有趣,你可以使用像Castle Windsor这样的IOC容器。

这样,你的控制器将只有一个构造函数,即带有接口的构造函数,并且不需要进行更改。

对于实体,你可以做与控制器相同的事情,为每个实体创建一个接口,并使用IOC模式,这样你只需要更改IOC容器的配置文件。

如果你不这样做,你需要更改你所说的所有内容。

希望这能帮到你!对我的英语表示抱歉!


你好,感谢回答。我正在了解控制反转(IOC)(令人惊讶的是它并不意味着国际奥委会!),看起来这是正确的方法。我的理解是,IoC 可以告诉它使用特定类来实现某个接口,因为设置存储在单独的文件中,所以很容易进行全局调整。唯一让我困扰的是,我需要一个额外的 IoC 框架,而且有不止一个。无论如何,再次感谢您的回答。 - Pickels

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