Pregunta

Estoy creando nuevos modelos que dejaré EF generar la base de datos. Modelos es similar al siguiente:

public class Model
{
    public int Id { get; set; }
    public string StyleNumber { get; set; }
    public virtual IList<Metal> Metals { get; set; }
    public virtual IList<ModelImage> Images { get; set; }
}

public class Metal
{
    public int Id { get; set; }
    public string Description { get; set; }
}

Me gustaría metal para ser una tabla de referencia w / las dos columnas, siendo único el campo "Descripción". En lugar de ello, EF crea la tabla de metal con una columna adicional haciendo referencia a la ID del modelo. ¿Hay una manera sencilla de cambiar el comportamiento a través de anotaciones de datos o la API de líquidos?

¿Fue útil?

Solución

EF piensa que está teniendo una relación de uno a muchos entre Modelo y metal y de la forma más sencilla de modelo que está almacenando el ID del modelo en la tabla de metal. Si desea mantener 'limpia' (es decir, no hay datos de relación) de la mesa de metal, a continuación, los datos de relaciones deben ser almacenados en una tabla separada, pero al hacer eso también está cambiando de manera implícita la relación entre el modelo y metal. Si realmente quiere seguir adelante con esto, se puede decir que la EF que desea una relación unidireccional muchos-a-muchos entre Modelo y metal. Puede hacerlo así por dentro OnModelCreating función del DbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}

Otros consejos

La respuesta de Steven K es correcto para quitar la entrada de clave externa en la mesa de metal, sin embargo, no hará cumplir el requisito único para el campo desctiption. Eso no es culpa de él, porque aunque, por desgracia, Código EF En primer lugar no tiene una anotación de restricción única todavía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top