Cześć, piszę sobie prosty sklep internetowy w MVC 5, używam Identity do obsługi użytkowników. Dodałem parę pół do klasy użytkownika by można było uzupełnić dane adresowe oraz przeglądać historie zakupionych produktów.
Tak wygląda klasa użytkownika:
namespace WebUI.Models
{
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
Purchases = new List<Purchase>();
}
public string Email { get; set; }
public List<Purchase> Purchases { get; set; }
public string Country { get; set; }
public string City { get; set; }
public string Street { get; set; }
public string PostalCode { get; set; }
public string HouseNumber { get; set; }
}
public class Purchase
{
public int Id { get; set; }
public IList<CartItem> CartItems { get; set; }
public System.DateTime Date { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("Users")
{
Database.SetInitializer<ApplicationDbContext>(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>());
}
}
}
Udaje mi się dodawać produkty do karty i wykonać akcję zakupu, rekord jest tworzony w bazie, jednak mam problem potem się do tych danych "dobrać".
Kod metod finalizującej zakup oraz wyświetlającej historie zakupów:
public ActionResult FinalizeShopping()
{
var user = UserManager.FindById(User.Identity.GetUserId());
Cart c = (Cart)TempData["cart"];
user.Purchases.Add(new Purchase() { CartItems = c.CollectionCartItems.ToList(), Date = DateTime.Now });
UserManager.Update(user);
c.Clear();
return View();
}
public ActionResult DisplayShoppingHistory()
{
var user = UserManager.FindById(User.Identity.GetUserId());
UserManager.Update(user);
return View(user.Purchases);
}
W kontrolerze obsługującym kartę obsługuję akcję zakupu w taki sposób, że zapisuję dane o zawartości karty w sesji i przekierowuję akcję do AccountControllera:
public ActionResult Purchase()
{
Cart c = GetCart();
TempData["Cart"] = c;
return RedirectToAction("FinalizeShopping", "Account");
}
Używam takiej metody
UserManager.Update(user);
by "zaaktualizowac dane w bazie względem danych w programie", sam nie wiem czy to na takiej zasadzie działa jak mi się wydaje.
Co zrobić by móc swobodnie odczytywać dane z bazy?
Pozdrawiam.