EF 7 beta 6: Entidades con una a muchas relaciones en EF 7

c# entity-framework entity-framework-core

Pregunta

Tengo un modelo muy simple:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }
}

OnModelCreating mi contexto (en EF 6 ) es algo así como:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }
}

Por lo que puedo decir, no hay una manera equivalente de hacer esto. Sé que las eliminaciones en cascada no son compatibles . Sin embargo, me preguntaba, ¿cuál es la mejor manera de modelar la relación de una a muchas como se define en mi ejemplo de código? Parece que todo eso se ha ido (o aún no se ha implementado).

He visto un ejemplo ( aquí ) de un DbContext exactamente como quiero, pero en realidad está mal y no funciona. Si trato de bajar ese código fuente, configurar mi entorno y guardar una entidad de blog con publicaciones, esas publicaciones no se guardan como se podría imaginar.

¿Hay alguna solución para esto?

Respuesta aceptada

Actualización : Esta respuesta fue escrita para EF7 beta7. Las APIs han cambiado desde entonces. Consulte http://docs.efproject.net/en/latest/modeling/relationships.html para obtener la información más reciente sobre el uso de EF Core.

Respuesta original

En EF 7, puede configurar una o varias relaciones en el método OnModelCreating. Para que esto funcione, agregue una propiedad a RandomThing para representar la clave forign, y también una referencia CLR al tipo principal.

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public Bag Bag { get; set; }
    public int BagId { get; set; }
}

En su contexto, configure la relación con la siguiente configuración:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public Bag Bag { get; set; }
    public int BagId { get; set; }
}

Nota al margen: cuando EF 7 planea agregar soporte para configurar esto a través de atributos.


Respuesta popular

aunque no he usado EF7 en absoluto, en EF6 haría que sus modelos se vieran así:

class Bag
{
    public int Id { get; set; }
    public virtual ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public int BagId {get; set;}
    [ForeignKey("BagId")]
    Public Bag Bag {get; set;}
}

De esta manera, la relación se resuelve con las anotaciones de datos y no necesita el model builder para esta tarea específica.




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é