Entity Framework 7 AddRange () no agrega entidades externas

c# entity-framework entity-framework-core

Pregunta

He estado usando EF Code First por un tiempo, pero esta es mi primera vez con EF7.

Tengo las siguientes clases de modelos en las que Venue tiene una relación de uno a muchos con Mostrar:

public class Show
{
    public int Id { get; set; }
    public Venue Venue { get; set; }
    //...
}

public class Venue
{
    public int Id { get; set; }
    public string Name {get; set; }
    //...
    public List<Show> Shows { get; set; }
}

Configuré el DBContext así:

public class Show
{
    public int Id { get; set; }
    public Venue Venue { get; set; }
    //...
}

public class Venue
{
    public int Id { get; set; }
    public string Name {get; set; }
    //...
    public List<Show> Shows { get; set; }
}

Luego, en algún código de inicio, inicializo la base de datos de esta manera:

public class Show
{
    public int Id { get; set; }
    public Venue Venue { get; set; }
    //...
}

public class Venue
{
    public int Id { get; set; }
    public string Name {get; set; }
    //...
    public List<Show> Shows { get; set; }
}

La tabla Shows está correctamente inicializada, excepto que VenueId es nulo. La mesa del local está completamente vacía.

¿Que esta pasando?

Respuesta aceptada

Hay un segundo argumento para DbSet.Add .

Add(TEntity entity, GraphBehavior behavior = GraphBehavior.IncludeDependents)

Aunque el valor predeterminado es IncludeDependents (también conocido como entidades IncludeDependents ), el comportamiento de EF7 de Add() no identifica a Venue como un elemento secundario de Show . En tu OnModelCreating necesitas especificar la relación entre Venue y Show . Ver Relaciones en los documentos EF7.

Ejemplo:

Add(TEntity entity, GraphBehavior behavior = GraphBehavior.IncludeDependents)

Sin embargo, incluso con esto, aún tendrá que llamar. Agregue en las nuevas instancias de Venue porque Show no es un dependiente (hijo) de Venue.

Add(TEntity entity, GraphBehavior behavior = GraphBehavior.IncludeDependents)

Cabe destacar: este comportamiento de .Add () ha sido una fuente de confusión en EF7 RC1 y su comportamiento puede estar cambiando en EF7 RC2. Consulte https://github.com/aspnet/EntityFramework/pull/4132


Respuesta popular

Necesitas actualizar tu modelo como este

public class Venue
{
  public int Id { get; set; }
  public string Name {get; set; }
  //...
  public List<Show> Shows { get; set; }
 }
public class Show
{
  public int Id { get; set; }
  public int VenueId { get; set; }
  [ForeignKey("VenueId")]
  public Venue Venue { get; set; }
  //...
}

El atributo ForegnKey se utiliza para definir la clave de avance de la relación entre dos tablas




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é