MVC 3 Tutorial帮助数据库操作员

时间:2012-04-13 18:01:01

标签: asp.net-mvc database asp.net-mvc-3 operator-keyword

我正在关注本教程http://www.asp.net/mvc/tutorials/mvc-music-store 当我偶然发现这段代码时。

public ActionResult AddToCart(int id)
    {

        // Retrieve the album from the database
        var addedAlbum = storeDB.Albums
            .Single(album => album.AlbumId == id);

        // Add it to the shopping cart
        var cart = ShoppingCart.GetCart(this.HttpContext);

        cart.AddToCart(addedAlbum);

        // Go back to the main store page for more shopping
        return RedirectToAction("Index");
    }

我不明白两件事:
1)     var addedAlbum = storeDB.Albums                 .Single(album => album.AlbumId == id);

这段代码在做什么?我不知道operator =>确实。我猜也是.Single是数据库的一些功能?
2) 这个功能正在调用自己?我不知道它是如何以这种方式将相册添加到购物车的。这不会导致函数进入无限循环吗?

2 个答案:

答案 0 :(得分:2)

似乎还有很多你不太熟悉的核心C#。

=>运算符是lambda运算符,它是编写内联函数的简洁方法。

Single函数是extension method,在这种情况下是对数据库的调用。此方法使用称为expression trees的简洁功能将强类型C#比较转换为相应的SQL代码。它是如何工作的是一个非常高级的主题,所以现在只需将其视为“神奇”。

AddToCart对象的cart方法与代码当前所在的AddToCart控制器操作方法不同。我没有相关的链接,因为这是相当基本的面向对象编程。

我认为cart.AddToCart实际上会更新数据库。

另请阅读LINQ以便更好地理解。这很可能是使用实体框架的Linq To Sql或LINQ to Entities。

答案 1 :(得分:0)

正在传递一个专辑的ID,然后可以通过storeDB.Albums.Single()调用从数据库中检索该专辑的ID。 (lambda说“在数据库中查找AlbumId列中的值与传递给控制器​​的ID匹配的条目。”)将.Single视为LINQ传真:

SELECT TOP(1) *
FROM   Albums
WHERE  Albums.AlbumId = <id>

然后抓住用户的购物车并将获取的相册对象添加到购物车。

然后,您将被重定向到索引,在该索引中可以列出购物车中的所有条目。