Utilizzo di [ComplexType] in Entity Framework Core

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

Domanda

Sto usando una proprietà della mia classe all'interno del modello di dati 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();
}

Il mio problema è che quando provo a creare una migrazione, EF Core segnala un errore.

Microsoft.Data.Entity.Metadata.ModelItemNotFoundException: The entity type 'RentABike.Models.Money' requires a key to be defined.

Se dichiaro una chiave, viene creata una tabella separata per "Money", che non è ciò che sto cercando.

C'è un modo per usare ComplexType in EF Core e metterlo tutto in un unico tavolo?

Risposta accettata

Il supporto per tipi complessi è attualmente disponibile nel backlog https://github.com/aspnet/EntityFramework/issues/246


Risposta popolare

Come aggiornamento basato su uno dei tuoi commenti sopra, ora usi la sintassi OwnsOne per questo utilizzando l'API Fluent nella funzione OnModelCreating di 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);
         });
     }
}

Non sono sicuro che faccia uso di ComplexTypeAttribute o no. Ma quando ho generato la mia migrazione tramite Add-Migration, ha generato come previsto per la vecchia documentazione ComplexType in questo modo (ad es. La tabella denominata Rate ha colonna Price_Amount ).




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché