2017-09-12 3 views
1

J'ai la classe de type complexe ..Here est la hiérarchiecartographie Entité colonne de cadre pour les types complexes

public class Item 
{ 
    public virtual Summary Summary { get; set; } 
} 

public class Summary 
{ 
    public int Id { get; set; } 

    [Key, ForeignKey("Item")] 
    public int ItemId { get; set; } 

    public virtual Item Item { get; set; } 

    public virtual ClaimSummary Cost { get; set; } 
} 

    [ComplexType] 
    public class ClaimSummary 
    { 
     public virtual decimal? SparePartsCost { get; set; } 

     public virtual decimal? LaborHours { get; set; } 
        ..... 
    } 

Quand je sauverai article dans DB, profileur SQL montre qu'il attend les noms de colonnes que Cost_SparePartsCost où mon DB a le nom de la colonne comme SparePartsCost. J'ai délibérément créé des noms de colonnes DB de telle manière que je ne veux pas '_' entre les noms. Comment puis-je laisser Entity Framework savoir que les colonnes sont mappées de manière à ignorer son mappage par défaut et suivre le mappage personnalisé?

Répondre

3

Vous pouvez remplacer la convention de nom de colonne de type complexe EF par défaut de plusieurs manières.

Si vous voulez éviter le préfixe dans toutes les entités utilisant le type complexe, vous pouvez utiliser les annotations de données (Column d'attributs):

[ComplexType] 
public class ClaimSummary 
{ 
    [Column("SparePartsCost")] 
    public virtual decimal? SparePartsCost { get; set; } 

    [Column("LaborHours")] 
    public virtual decimal? LaborHours { get; set; } 

    // ... 
} 

ou configuration couramment:

modelBuilder.ComplexType<ClaimSummary>() 
    .Property(e => e.SparePartsCost).HasColumnName("SparePartsCost"); 
modelBuilder.ComplexType<ClaimSummary>() 
    .Property(e => e.LaborHours).HasColumnName("LaborHours"); 

Si vous voulez remplacer la convention par défaut juste pour une entité (comme votre Summary), alors vous pouvez utiliser la configuration courante au niveau de l'entité comme ceci:

modelBuilder.Entity<Summary>() 
    .Property(e => e.Cost.SparePartsCost).HasColumnName("SparePartsCost"); 
modelBuilder.Entity<Summary>() 
    .Property(e => e.Cost.LaborHours).HasColumnName("LaborHours"); 

Référence: Associations in EF Code First: Part 2 – Complex Types

+0

Yep Il a travaillé Merci – user1532976