2012-04-13 3 views
0

Я следовал этому руководству http://www.asp.net/mvc/tutorials/mvc-music-store , когда я наткнулся на этот фрагмент кода.MVC 3 Помощник справочной базы данных

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) вар addedAlbum = storeDB.Albums Одиночная (альбом => album.AlbumId == ID);

Что делает этот код? Я не знаю, что делает оператор =>. Кроме того, я думаю, что единственная функция для базы данных?
2) Эта функция звонит самому себе? Я не вижу, как он добавляет альбом в корзину таким образом. Разве это не приведет к тому, что функция перейдет в бесконечный цикл?

+4

Возможно, вам необходимо начать изучение C# перед тем, как попасть в ASP.NET MVC. –

ответ

2

Кажется, что есть много основных C#, с которыми вы еще не знакомы.

Оператор => является оператором лямбда, который является лаконичным способом написания встроенной функции.

Функция Single - это extension method, которая в этом случае делает звонок в базу данных. Этот метод использует опрятную функцию, известную как expression trees, для преобразования строго типизированного сравнения C# в соответствующий код SQL. Как это работает, это довольно продвинутая тема, поэтому на данный момент просто считайте ее «волшебной».

AddToCart метод cart объекта отличается от метода действия AddToCart контроллера код в данный момент. Я не ссылку для этого, так как это довольно простой объектно-ориентированное программирование.

Я бы предположил, что cart.AddToCart фактически обновит базу данных.

Также ознакомьтесь с LINQ для лучшего понимания. Это, скорее всего, либо Linq To Sql, либо LINQ to Entities с использованием Entity Framework.

0

Действие передается идентификатором альбома, который затем может быть извлечен из базы данных с помощью вызова storeDB.Albums.Single(). (Лямбда говорит «найти запись в базе данных, где значение в столбце ALBUMID соответствует идентификатор передается в контроллер.») Подумайте .Single как LINQ факсимиле:

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

Это то захватывая пользователя в корзину и добавив, что выбранный объект альбома в корзину.

Затем вы перенаправляетесь в индекс, где он может перечислить все записи в корзине.

Смежные вопросы