2016-03-31 25 views
0

Uygulamamda, ekler ana varlık oluşturulmadan önce veritabanına eklenir. Kullanıcı formu doldururken ekler eklenir. Eklerin kimlikleri tarayıcı istemcisine döndürülür. varlık oluşturulduğunda Sonra, bir json nesnesi, aşağıdaki formu (C# temsilciliği) gönderilir:Yabancı anahtarların bir listesini varlık çerçevesindeki varlıklar listesine bağlamanın en iyi yolu

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

Şimdi bir varlık Framework benzeri bu kimlikleri kaydetmek ister ve etkili yolu olacaktır. İdeal olarak, böyle bir Varlık Çerçevesi özelliği olacaktır. Böyle sorgulayabilir sonra

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

Ve: Sadece olurdu

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

yapmak

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

verimli benzer bir şey yapmak nasıl mümkünse Ataşmanlarının tutarak veritabanında?

Teşekkür

+0

birisi downvote lütfen açıklayabilir? Ekleri veritabanından almadan veya yapmadan bunu yapmanın kolay bir yolu var mı? – raichu

cevap

1

FKS beri Evet, gerek getirmesi. Ekinizin bir Id özelliği olduğunu varsayarak, int modellerinin koleksiyonunu varlık modeline (Varlık) eklemeyin. Şimdi böyle bir tasarruf edebilirsiniz (başka yolları da vardır):

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(); 

(bul çocukları geri getirmeyecek) Sorgunuzla ayarlamak gerekiyor (veya ToList çalışmak):

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

Yoksa bir liste istiyorsanız:

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