Olá, Diogo
O intuito é ensinar, mas não seria melhor trabalharmos sempre com session e somente na hora da checkout acessarmos o banco?
Depende. Numa aplicação de e-commerce, você pode estar usando o celular para colocar vários itens no carrinho e, de repente, fica sem conexão com internet por algumas horas. Quando voltar a acessar, de casa, usando um notebook, percebe que seu carrinho está vazio. Esse é um problema que pode ser evitado quando persistimos as ações do usuário num banco relacional ou num outro banco No-SQL.
Outra dúvida, como fazemos para gravar objetos na session no MVC core? É possível?
Podemos criar uma classe de extensão para ler/gravar objetos serializados, utilizando internamente os métodos GetString
e SetString
que são nativos da session:
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session,string key)
{
var value = session.GetString(key);
return value == null ? default(T) :
JsonConvert.DeserializeObject<T>(value);
}
}