2012-04-01 6 views
0

Ich habe folgende Instanzen:Multiples Objektbeziehung in dem Code Ersten

  • Kunden
  • Firmen
  • Mitarbeiter
  • Bestellungen
  • Order-Element

Dann habe ich eine andere Entität namens Notes. Jede Entität kann viele Notes haben, wie Sie dies mit Code First Flent API erreichen? Das Ziel besteht darin, eine Objekt-ID in den Notes-Tabellen zu haben, und diese Entitäts-ID würde auf die richtige Entität zeigen.

Antwort

0

Entity Framework unterstützt keine heterogenen Verbände aus der Box (andere Frameworks, wie NHibernate, tun)

Meine wor Umgehung: Verwenden Sie eine NoteService, die die Notizen für eine dauerhafte Entität speichert und abruft.

Hier ist ein vereinfachtes Auszug:

public ICollection<Note> GetNotes(IEntity entity) 
{ 
    var entityType = ObjectContext.GetObjectType(entity.GetType()).Name; 
    return context.Query<Note>() 
        .Where(x => x.EntityId == entity.Id && 
           x.EntityType == entityType) 
        .ToList(); 
} 

public void AddNote(IEntity entity, Note note) 
{ 
    note.EntityType = ObjectContext.GetObjectType(entity.GetType()).Name; 
    note.EntityId = entity.Id; 
    context.Add(note); 
} 
1

Sie können alle Einheiten mit neuer Basisklasse erweitern, die Notes-Eigenschaft Karte (n WithComment.) und als eine Klasse schreiben kann die neue Eigenschaft zur Karte:

public class WithComment 
{ 
    public virtual IList<Note> Notes { get; set; } 
} 

public class Customer : WithComment 
{ 
} 

public class CustomerMapping : EntityTypeConfiguration<Customer> 
{ 
     public CustomerMapping() 
     { 
      ToTable("Customers"); 
      .......................... 

      HasMany<Notes>(o => o.Notes); // relation to note class 
     } 
} 

und fügen Sie dann Konfiguration

public class MyContext : DbContext 
{ 
     public MyContext() { } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.Add(new CustomerMapping()); 

      base.OnModelCreating(modelBuilder); 
     } 
} 
Verwandte Themen