EntityFramework - campos não mapeados
veja como
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