Utilisation de [ComplexType] dans Entity Framework Core

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

Question

J'utilise une propriété de ma propre classe dans le modèle de données 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();
}

Mon problème est que lorsque j'essaie de créer une migration, EF Core signale une erreur.

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

Si je déclare une clé, une table distincte pour "Money" est créée, ce qui n'est pas ce que je recherche.

Existe-t-il un moyen d'utiliser ComplexType dans EF Core et de tout mettre dans une seule table?

Réponse acceptée

Le support pour les types complexes est actuellement dans le backlog https://github.com/aspnet/EntityFramework/issues/246


Réponse populaire

En tant que mise à jour basée sur l'un de vos commentaires ci-dessus, vous utilisez désormais la syntaxe OwnsOne à l'aide de l'API Fluent dans la fonction OnModelCreating votre DbContext.

[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);
         });
     }
}

Je ne suis pas vraiment sûr s'il utilise ou non le ComplexTypeAttribute . Mais lorsque j'ai généré ma migration via Add-Migration, elle a généré comme prévu pour l'ancienne documentation Price_Amount (la table nommée Rate a la colonne Price_Amount ).



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi