【问题标题】:Entity Framework - DbContext SaveChanges()实体框架 - DbContext SaveChanges()
【发布时间】:2016-04-11 20:02:20
【问题描述】:

有人可以告诉我这是否可能,以及如何避免在此代码中使用两次_context.SaveChanges()

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

这就是我的实体的样子

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

【问题讨论】:

    标签: entity-framework dbcontext entities savechanges


    【解决方案1】:

    在您的 UserMessage 类中,您设置引用而不是外键,因为外键尚不知道。

    在您的代码中,这意味着:

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

    【讨论】:

    • 谢谢!
    • EF 持久化不是无知的吗,意思是:所有更改的实体都以正确的顺序保存在提交点?只是好奇,因为使用 NHibernate,尝试显式调用对单个对象的 DB 插入/更新是一个常见错误,除了在 UnitOfWork 结束时(通常通过 Flush() 或事务 Commit())。 NHib 中的 Save(object) 方法实际上只是将一个对象附加到持久性上下文(如 EF Add()),而不是调用立即插入/更新。通过设置 ID 添加相关对象在 NHib 中也是错误的,应按照此答案中的说明添加它们。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2020-10-15
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多