2016-03-24 28 views
0

Birisi bana bu mümkün olduğunu ve bu kodda iki kez _context.SaveChanges() kullanmaktan kaçınmak nasıl olur? Benim Varlıkları, sizin UserMessage sınıfının üzerindeEntity Framework - DbContext SaveChanges()

public class UserMessage 
{ 
    public int ID { get; set; } 
    public string SenderID { get; set; } 
    public string RecieverID { get; set; } 
    public int? ProductID { get; set; } 
    public int MessageID { get; set; } 

    public User Sender { get; set; } 
    public User Reciever { get; set; } 
    public Product Product { get; set; } 
    public Message Message { get; set; } 
} 

public class Message 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Body { get; set; } 
     public DateTime Date { get; set; } 
    } 

cevap

0

benziyor nasıl

 Message m = new Message 
     { 
      Title = message.Title, 
      Body = message.Body, 
      Date = DateTime.Now 
     }; 

     _context.Messages.Add(m); 
     _context.SaveChanges(); 

     UserMessage messageToUser = new UserMessage 
     { 
      MessageID = m.ID, 
      ProductID = message.ProductID, 
      SenderID = message.SenderID, 
      RecieverID = reciever.Id 
     }; 

     _context.UserMessages.Add(messageToUser); 
     _context.SaveChanges(); 

Bu yabancı anahtar henüz bilinmemektedir gibi, sen yerine yabancı anahtarın başvuru kümesidir. Kodunuzda

, anlamına gelir: şeydi

Message m = new Message 
    { 
     Title = message.Title, 
     Body = message.Body, 
     Date = DateTime.Now 
    }; 

    _context.Messages.Add(m); 

    UserMessage messageToUser = new UserMessage 
    { 
     ProductID = message.ProductID, 
     SenderID = message.SenderID, 
     RecieverID = reciever.Id, 
     Message = m 
    }; 

    _context.UserMessages.Add(messageToUser); 
    _context.SaveChanges(); 
+0

Teşekkür !! – IvanD

+0

EF kalıcılığından habersiz değil mi, yani: tüm değiştirilmiş varlıklar bir taahhüt noktasında, doğru sırada kaydediliyor mu? Sadece meraklı, çünkü NHibernate ile çalışarak, tek bir nesne için DB'ye insert/update'i açıkça çağırmaya teşebbüs etmek, UnitOfWork'un (genellikle Flush() veya transaction Commit()) dışında, ortak bir hatadır. NHib'deki Save (object) yöntemi, aslında, kalıcı ekleme/güncellemeyi değil, kalıcılık bağlamına (EF Add() gibi) bir nesne ekler. IDib ayarlanarak ilgili nesnelerin eklenmesi, NHib'de yanlıştır, bu cevapta açıklandığı gibi eklenmelidir. –