🔥 Articles, eBooks, Jobs, Columnist, Forum, Podcasts, Courses 🎓



EntityFramework - campos não mapeados

veja como

Image

Olá pessoal, meu nome é Mauricio Junior e hoje eu vou mostrar pra você como trabalhar com Entity Framework, LINQ e retonar campos não mapeados no database. Eu vou falar mais sobre o problema e sobre a solução no decorrer do artigo. Veja as ferramentas que eu utilizei:

  • Linguagem C#
  • Ferramenta: Visual Studio ou Rider
  • Database: SQL Server
  • Framework: .NETCore e EntityFramework

Problema:

O problema que tenho é porque uso mais de uma tabela do database e preciso retornar dados misturados usando apenas uma entidade da tabela do database. Com o EntityFramework é necessário criar uma entidade diferente e depois retornar os dados.

Solução:

Para a solução do meu problema sem precisar novas entidades, basta colocar uma tag [NotMapped] em cima da propriedade.

Vou analisar o código da Model referente a entidade.

Código 1.1 - Insert

public bool Insert(ScheduleModel model)
{
    try
    {
        _db.ScheduleModelDbSet.Add(model);
        _db.SaveChanges();

        return true;
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

Usando o entity framework e para inserir valores no database basta adicionar a model e mandar salvar. As propriedades mapeadas são exatamentes os campos do database.

Código 1.2 - Model Schedule

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace GiftWeb.Model
{
	[Table("Schedule", Schema = "dbo")]   
	public class ScheduleModel
	{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int IdSchedule { get; set; }

    public DateTime DateSchedule { get; set; }

    public string InitialHourSchedule { get; set; }
    
    public string EndHour { get; set; }
    
    public int UserDonorsId { get; set; }

    public string Observation { get; set; }

    public DateTime Date { get; set; }

    public int UserDonorsIdInserted { get; set; }

    [NotMapped]
    public string Name { get; set; }

    [NotMapped]
    public string Email { get; set; }

    [NotMapped]
    public string Phone { get; set; }
  }
}

Analisando todo o código, eu coloquei as últimas propriedades como [NotMapped] e que serão retornados pelo SELECT específico. Os campos Name, Email e Phone não estão no database da tabela ["Schedule"] e por isso eu coloquei na entidade não mapeada.

O código 1.3 - Retorna dados de mais de uma tabela.

public IEnumerable<ScheduleModel> GetScheduleByIdUser(int idUser)
{
    var query = (from schedule in _db.ScheduleModelDbSet
        join user in _db.DonorsUserDbSet
            on schedule.UserDonorsId equals user.UserDonorsId
            where schedule.UserDonorsId == idUser
        select new ScheduleModel
        {
            Name = user.Phone,
            Email = user.EmailDonors,
            Phone = user.Phone,
            IdSchedule = schedule.IdSchedule,
            DateSchedule = schedule.DateSchedule,
            Observation = schedule.Observation,
            InitialHourSchedule = schedule.InitialHourSchedule,
            EndHour = schedule.EndHour,
            UserDonorsId = schedule.UserDonorsId
        });

    return query.OrderBy(x=>x.Name);
}

Eu pego os dados de uma tabela de usuário e depois pego os dados da tabela schedule como colocado no código 1.3. Bastou colocar [NotMapped] para os dados serem mostrados na tela do usuário.

Bom, espero ter ajudado e qualquer coisa pode falar comigo pelo site www.mauriciojunior.

Subscribe ecode10.com

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.

Log In





Related articles




Top