2011-09-05 5 views
1

J'utilise Entity Framework 4.1 (premier code) et ont défini des entités similaires à ce qui suitEntity Framework (4.1) Relations

public class ImageItem 
{ 
    [Column(IsDbGenerated = true, IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)] 
    public int Id { get; set; } 
    public string ImageUrl { get; set; } 
    public int Height { get; set; } 
    public int Width { get; set; } 
    // other stuff in here 
} 

public class MyItemWithImages 
{ 
    [Column(IsDbGenerated = true, IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<ImageItem> Thumbnails { get; set; } 
    // other stuff in here 
} 

Ce que je suis en train de réaliser est d'ajouter une autre propriété de tenir un « MainImage "élément de type ImageItem, qui n'apparaît pas nécessairement dans la collection de vignettes.

J'ai essayé d'ajouter les éléments suivants

public virtual ImageItem MainImage { get; set; } 

mais remplace la relation entre la collection MyItemWithImages.Thumbnails - pas ce que je voudrais arriver.

Quelqu'un peut-il me diriger dans la bonne direction pour ajouter cette nouvelle propriété, s'il vous plaît?

+2

Vous utilisez l'attribut 'Column' de Linq-to-sql. Il sera complètement ignoré par EF. Cela fonctionne juste à cause des conventions par défaut. –

Répondre

2

Vous devrez utiliser les mappages courants pour mapper votre modèle.

substituez la méthode OnModelCreating de votre commande DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<MyItemWithImages>() 
    .HasMany(m => m.Thumbnails) 
    .WithOptional() 
    .Map(m => m.MapKey("foreignKeyColumnName")); 

    modelBuilder.Entity<MyItemWithImages>() 
    .HasOptional(m => m.MainImage) 
    .WithMany() 
    .Map(m => m.MapKey("foreignKeyColumnName")); 
} 

Si vous avez inclus les colonnes clés étrangères en tant que propriétés utilisent ensuite celles des applications. Pour plus de détails sur les mappages, reportez-vous au Fluent Mapping API.

+0

Bonne réponse! Était looknig pour cela aussi. – Rushino

Questions connexes