2016-03-31 8 views
0

In meiner Anwendung werden Anhänge der Datenbank hinzugefügt, bevor die Haupteinheit erstellt wird. Die Anhänge werden hochgeladen, während der Benutzer das Formular ausfüllt. Die IDs der Anhänge werden an den Browser-Client zurückgegeben.Die beste Methode zum Verknüpfen einer Liste von Fremdschlüsseln mit einer Liste von Entitäten im Entitätsframework

public class EntityModel { 
    // some properties 
    //... 
    ICollection<int> AttachementIds { get;set; } 
} 

Nun möchte Ich mag auf dieser IDs in einer Entity Framework-wie speichern und effizient: Dann, wenn das Unternehmen erstellt wird, wird ein JSON-Objekt der folgenden Form (C# Darstellung) gesendet. Idealerweise würde es so etwas wie ein Entity Framework geben.

Entity entity = Mapper.Map<Entity>(entityModel); 
dbContext.Entities.Add(entity); 
dbContext.SaveChanges(); 

Und dann wie folgt abfragen:

public class Entity { 
    public ICollection<Attachement> Attachements; 
    public ICollection<int> AttachementsIds; 
} 

Wo ich gerade zu tun haben

List<Attachement> attachements = dbContext.Entities.Find(1).Attachements.ToList(); 

Wie etwas tun effizient ähnlich, wenn möglich, halten die attachements in der Datenbank?

Dank

+0

Kann jemand bitte erklären, downvote? Gibt es einen einfachen Weg dies zu tun, ohne die Attachements aus der Datenbank zu holen oder nicht? – raichu

Antwort

1

Ja, da Sie die FKs keine Notwendigkeit zu holen haben. Angenommen, Ihr Attachement hat eine Id-Eigenschaft, fügen Sie dem Entitätsmodell (Entität) nicht die Auflistung der Int-IDs hinzu. Jetzt können Sie wie folgt speichern (es gibt auch andere Möglichkeiten, wie gut):

var entity = Mapper.Map<Entity>(entityModel); //parent properties 
foreach (var id in AttachementsIds) 
{ 
    entity.Attachements.Add(new Attachement { Id = id }); 
} 
dbContext.Entities.Add(entity); 
dbContext.SaveChanges(); 

Müssen Sie Ihre Abfrage einzustellen, wie finden() nicht die Kinder zurückbringen (oder arbeiten mit ToList):

var attachement = dbContext.Entities 
          .Include(e => e.Attachements) 
          .First(e => e.Id == 1); 

Oder wenn Sie eine Liste:

var attachements = dbContext.Entities 
          .Include(e => e.Attachements) 
          .ToList(); 
Verwandte Themen