Usando [ComplexType] en Entity Framework Core

asp.net-core-mvc entity-framework-core

Pregunta

Estoy usando una propiedad de mi propia clase dentro del modelo de datos de EF Core.

public class Currency
{
    public string Code { get; set; }
    public string Symbol { get; set; }
    public string Format { get; set; }
}

[ComplexType]
public class Money
{
    public int? CurrencyID { get; set; }
    public virtual Currency Currency { get; set; }
    public double? Amount { get; set; }
}

public class Rate
{
    public int ID { get; set; }
    public Money Price = new Money();
}

Mi problema es que cuando intento crear una migración, EF Core informa un error.

public class Currency
{
    public string Code { get; set; }
    public string Symbol { get; set; }
    public string Format { get; set; }
}

[ComplexType]
public class Money
{
    public int? CurrencyID { get; set; }
    public virtual Currency Currency { get; set; }
    public double? Amount { get; set; }
}

public class Rate
{
    public int ID { get; set; }
    public Money Price = new Money();
}

Si declaro una clave, se crea una tabla separada para "Dinero", que no es lo que estoy buscando.

¿Hay alguna forma de utilizar ComplexType en EF Core y ponerlo todo en una sola tabla?

Respuesta aceptada

El soporte para tipos complejos se encuentra actualmente en el registro https://github.com/aspnet/EntityFramework/issues/246


Respuesta popular

Como una actualización basada en uno de sus comentarios anteriores, ahora usa la sintaxis de OwnsOne para esto usando la API Fluent en la función OnModelCreating de su OnModelCreating .

[ComplexType]
public class Money
{
    public double? Amount { get; set; }
}

public class Rate
{
    [Key]
    public long Id { get; set; }

    public Money Price { get; set; }
}

public MyDbContext : DbContext
{
     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         modelBuilder.Entity<Rate>(entity =>
         {
             entity.OwnsOne(e => e.Currency);
         });
     }
}

No estoy realmente seguro de si hace uso del ComplexTypeAttribute o no. Pero cuando generé mi migración a través de Add-Migration, se generó de la forma esperada para la documentación anterior de ComplexType de esta manera (es decir, la tabla denominada Rate tiene la columna Price_Amount ).




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é