Asp.net Mvc:使用LINQ to SQL创建模型类

时间:2009-08-02 00:50:41

标签: asp.net-mvc repository-pattern

我正在努力学习Asp.net Mvc所以我正在尝试 this教程。

他们讨论了存储库模式以及如何轻松地更改为其他数据访问技术,而不是直接将Linq调用到Sql。

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

注意:在阅读本教程之前,我从未真正了解界面的工作原理,但仍然没有100%清楚。我现在把它看作某种类的“模板”。

成功使用Linq到Sql后,我认为尝试Ado.net实体框架会很好,因为我已经阅读了很多相关内容。他们说使用存储库模式可以很容易切换,所以我想我会测试它。

我的问题是:如何更改为Ado.net EF?

这是我认为我应该做的。

  • 添加Movie.edmx文件并对其进行配置(添加我的影片表)。
  • 根据IMovieRepository编写一个新类,并将其命名为MovieEFRepository。
  • 将控制器构造函数中的参数更改为MovieEFRepository。这是我觉得奇怪的第一件事,因为在教程中他们说如果你改用其他数据源,不使用存储库会强制你改变所有的控制器。我是否需要更改每个控制器,因为我指定了MovieRepository类?
  • 我认为我需要做的最后一次调整是更改视图。因为它使用的是由Linq to Sql设计器创建的Product类。我不确定我将如何做到这一点。我想我应该使用一些不依赖于dbml文件的对象?

如果我对Asp.net Mvc稍微简单一点,请原谅我。我是webdesigner,对Asp.net webdevelopment非常感兴趣。

2 个答案:

答案 0 :(得分:6)

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

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

现在看一下这实际上是一个非常好的截屏视频,以及使用Unity和IoC / DI是多么容易的例子。当时我完全不明白,所以我继续谷歌搜索。

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

对我来说,这个网站编码新手的人有点抽象。这也许听起来很奇怪,但该网站上的字体,行高和排版真的很糟糕,这让它更难阅读。

我读过的下一个网站是关于温莎城堡的,因为AlfredoFernández说这很容易使用。

文档并不坏,但是我将其“入门”基本示例转换为我的Asp.net Mvc应用程序时遇到了一些问题。第2部分和第3部分从入门开始就失踪了。

在此之后,我开始寻找不同的框架,看看我是否能找到一个非常基本的例子。如果我再看一下第一次截屏,我会很快修好它,但不知怎的,我已经忘记了它。

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

所以我决定去Asp.net Mvc网站,因为那是我开始学习Asp.net Mvc的地方。我发现第一次截屏和MIX09演示非常清楚,我理解人们谈论的大部分内容。在构建Storefront应用程序时,我被Rob Conery的第二次截屏视频困住了。因为我对存储库和IOC / DI了解得更多,所以我认为再次开始观看Rob Conery的截屏会是一个好主意。在其中一个截屏视频中,他谈到将所有样本上传到codeplex。

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

在使用我的webapplication尝试这个之后,我最终能够在我的应用程序中使用Structure Map(Hooray)。

他还向我展示了如何修复从Linq到Sql的Product类的依赖性。他创建了一个额外的对象,然后通过Linq查询中的“选择新产品{}”进行调用。

哇,这个答案比我的计划要长一点,但我希望这能帮助像我这样非常喜欢编码的人和Asp.net Mvc。

答案 1 :(得分:1)

您可能因为注入而将您的存储库解耦,而不是因为

而仅仅遵循示例

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

我建议你阅读有关IOC的内容,简单而且非常有趣,你可以像城堡windsor一样使用和ioc容器。

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

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

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

我希望有所帮助!抱歉我的英文!