40
loading...
This website collects cookies to deliver better user experience
npgsql.entityframeworkcore.postgresql
ele vai permitir fazer os métodos CRUD de forma mais parecida com o EFCore ORM que estamos acostumados.npgsql.entityframeworkcore.postgresql
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Toll
EFCore.NamingConventions
ConfigureServices Method
services.AddDbContext<PostgresNsql.MyContext>(option => option.UseNpgsql(Configuration.GetConnectionString("Nsql")));
public class MyContext : DbContext
{
public MyContext(DbContextOptions options) :base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseNpgsql()
.UseSnakeCaseNamingConvention();
protected override void OnModelCreating(ModelBuilder modelBuilder)
=> modelBuilder
.Entity<DataModel>()
.Property(e => e.Id)
.UseIdentityAlwaysColumn();
public DbSet<DataModel> DataModels { get; set; }
}
UseSnakeCaseNamingConvention()
Snake Case pode ser necessário para lidar com JSONs que separam 2 palavras com _ underline. Dessa forma não tera problemas com serialização..Property(e => e.Id)
.UseIdentityAlwaysColumn();
Identity always column é um dos tipos de atribuição de valor que você pode dar, nessa modalidade você define que os valores serão gerados diretamente no banco, impossibilitando você setar o valor no momento de inserção no banco de dados.System.Text.Json
e tipar a sua propriedade com a classe JsonDocument, pois ele já identificará que ali será recebido dados em JSON e facilitará a descerialização.public class DataModel : IDisposable
{
public int Id { get; set; }
public string Nome { get; set; }
public int idade { get; set; }
public JsonDocument Data { get; set; }
public void Dispose() => Data?.Dispose();
}
[Column(TypeName = "jsonb")]
para identificar o objeto Json e mapear as propriedades.public class DataModel
{
public int Id { get; set; }
public string Nome { get; set; }
public int idade { get; set; }
[Column(TypeName = "jsonb")]
public Endereco Address { get; set; }
}
public class Endereco // Mapeando os dados recebidos em Json
{
public string Rua { get; set; }
public int Numero { get; set; }
public Casa[] Casas { get; set; }
}
public class Casa
{
public decimal Preco { get; set; }
public string EnderecoCompleto { get; set; }
}
public List<DataModel> GetAll()
{
return _myContext.DataModels.ToList();
}
public IEnumerable<string> Get()
{
var resultado = _myContext.DataModels;
return resultado.Where(x => x.idade == 12 && x.Data.RootElement.GetProperty("lastName").GetString() == "Paixao").ToList();
}
public IEnumerable<string> Get()
{
var resultado = _myContext.DataModels;
return resultado.Select(x=>x.Data.RootElement.GetProperty("lastName").GetString()).ToList();
}
RootElement
é uma classe que vai pegar os dados JSON da propriedade Data
permitindo que você então denomine com o método GetProperty("propriedade")
qual propriedade do JSON você vai trabalhar e por final você deve colocar o método GetString()
para converter o dados JSON que você filtrou em string.