Свободный API в Entity Framework для объединения 2 таблиц - PullRequest
1 голос
/ 16 апреля 2020

Я следую этой документации , чтобы объединить 2 таблицы с помощью Fluent API

Это мои объекты:

public class Personas
{
    [Key]
    public int idPersona { get; set; }
    public String nombrePersona { get; set; }
    public String apellidoPersona { get; set; }
    public String loginPersona { get; set; }
    public int idRol { get; set; }
    public Rol rolPersona { get; set; }
}

public class Rol
{
    [Key]
    public int idRol{ get; set; }
    public String nombreRol { get; set; }
    public ICollection<Personas> personas { get; set; }
}

И это мой файл DBcontext

 public class AppDBContext:DbContext
{
    public AppDBContext(DbContextOptions<AppDBContext> options):base(options) {}

    public DbSet<Personas> tPersonas { get; set; }
    public DbSet<Rol> tRol { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Rol>().HasMany(s => s.personas);
        base.OnModelCreating(modelBuilder);
    }
}

Первая проблема: код не завершен, но результат выглядит следующим образом:

enter image description here

Результат должен выглядеть следующим образом

enter image description here

Вторая проблема: в документации рекомендуется использовать класс «DbModelBuilder», а не класс «ModelBuilder», но Visual Studio автоматически завершает метод «OnModelCreating». По какой-то причине я не могу использовать «System.Data.Entity», и мне разрешено использовать только «Microsoft.EntityFrameworkCore».

Пожалуйста, помогите

РЕДАКТИРОВАТЬ 1: Это код контроллера

// GET api/<controller>/5
    [HttpGet("{id}")]
    public HttpResponseMessage Get(int id)
    {
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
        Personas persona = dbContext.tPersonas.FirstOrDefault(p => p.idPersona == id);
        if (persona != null)
        {
            response.Content = new StringContent(JsonConvert.SerializeObject(persona));
            response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            return response;
        }
        else
        {
            response = new HttpResponseMessage(HttpStatusCode.BadRequest);
            response.Content = new StringContent("error message");
            return response;
        }
    }

1 Ответ

0 голосов
/ 16 апреля 2020

Первая проблема: вы должны включить соответствующие данные с .Include().

[HttpGet("{id}")]
public async Task<ActionResult<Personas>> Get(int id)
{
    var persona = await dbContext.tPersonas.Inculde(x => x.rolPersona).SingleAsync(x => x.idPersona == id));

    if (persona == null)
    {
        return NotFound();
    }

    return persona;
}

Вторая проблема: используйте ModelBuilder, как указано в официальных документах: https://docs.microsoft.com/en-us/ef/core/modeling/ для EF Core

В случае EF 6 (DbModelBuilder) вы установили пакет EntityFramework через nuget? https://www.nuget.org/packages/EntityFramework/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...