¿Cómo crear una relación de muchos a muchos con las últimas compilaciones nocturnas de EF Core?

entity-framework-core

Pregunta

¿Cómo se utiliza la API Fluent para crear una relación de muchos a muchos entre dos tablas en EF7 EF Core? Por ejemplo, supongamos que tiene las siguientes tablas:

Diagrama de la base de datos de Photos to People

¿Cómo se podría aprovechar el modelBuilder en la clase DbContext para definir una relación como esta?

He visto este enlace de las notas de la reunión del equipo de EF sobre este tema, pero es del año pasado y me pregunto si hay nueva información sobre cómo abordar esto en EF7 EF Core.

Soy capaz de crear una o muchas relaciones entre Fotos y Fotos, así como Personas y Fotos. La base de datos se genera como me gustaría, pero la navegación entre Personas y Fotos ahora requiere interacción con una entidad intermedia. Me gustaría evitar esto.

Respuesta aceptada

Esto es seguido por # 1368 . La solución es asignar la tabla de unión a una entidad:

class Photo
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

class PersonPhoto
{
    public int PhotoId { get; set; }
    public Photo Photo { get; set; }

    public int PersonId { get; set; }
    public Person Person { get; set; }
}

class Person
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

Asegúrese de configurar PersonPhoto con una clave compuesta:

class Photo
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

class PersonPhoto
{
    public int PhotoId { get; set; }
    public Photo Photo { get; set; }

    public int PersonId { get; set; }
    public Person Person { get; set; }
}

class Person
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

Para navegar, utiliza un Select:

class Photo
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}

class PersonPhoto
{
    public int PhotoId { get; set; }
    public Photo Photo { get; set; }

    public int PersonId { get; set; }
    public Person Person { get; set; }
}

class Person
{
    public int Id { get; set; }
    public ICollection<PersonPhoto> PersonPhotos{ get; set; }
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué