IvanD
IvanD

Reputation: 157

Entity Framework - DbContext SaveChanges()

Can someone tell me is it possible, and if it is how to avoid using two times _context.SaveChanges() in this code?

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

This is how my Entities look like

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; }
    }

Upvotes: 3

Views: 8625

Answers (1)

Gigabyte
Gigabyte

Reputation: 581

On your UserMessage class, you set the reference instead of the foreign key, as the foreign key is not known yet.

In your code, that would mean:

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

Upvotes: 3

Related Questions