PUT 方法不保存两个实体对象

Posted

技术标签:

【中文标题】PUT 方法不保存两个实体对象【英文标题】:PUT method not saving two entity objects 【发布时间】:2016-02-19 14:23:51 【问题描述】:

我是实体框架的新手,现在正在努力解决一个问题。我正在使用 MVC api 和 EF6。

我在 PUT 方法中保存了成员详细信息。那工作得很好。

现在,我修改了代码以保存评论(添加了新方法 PublishComment()),但这会破坏代码而没有任何错误消息!调试会话只是挂在 db.SaveChanges() 上。

public void Put(Guid id, MemberListItem item)
    
using (Context db = new Context())
        
            Person updPerson = db.People.Find(item.PersonID);

            if (updPerson.PrincipleContact != item.PrincipalMember)
                                
                updPerson.PrincipleContact = item.PrincipalMember;
            
            string memberName = updPerson.GivenName1;
            Guid memberID = updPerson.MemberID;                

            db.Entry(updPerson).State = System.Data.Entity.EntityState.Modified;
            PublishComment(db, memberID, "User Modified. " + memberName + " modified from user profile.");
            db.SaveChanges();
        


public void PublishComment(Context db, Guid memberID, string comment)
    
        MemberComment newComment = new MemberComment();
        newComment.CommentID = new Guid();
        newComment.MemberID = memberID;
        newComment.DateAdded = DateTime.Now;
        newComment.Comment = DateTime.Now.ToShortDateString() +": " + comment;
        db.MemberComments.Add(newComment);            

    

【问题讨论】:

我看不出代码有什么问题。您可以尝试运行(而不是调试)并查看它是否仍在中断。有时 Visual Studio 需要重新启动! ComcopyID 不是数据库中的uniqueidentifier 并具有自动生成的值吗? PersonMemberComment 之间是否有外键?另外,我看不到您实际在哪里使用 idPut 方法。 【参考方案1】:

我认为你的问题在这里:

newComment.CommentID = new Guid(); // eg 00000000-0000-0000-0000-000000000000

但我不太确定为什么您没有看到重复的密钥异常(这就是它看起来会生成的)

见Guid is all 0's (zeros)?

【讨论】:

是的,你是对的。谢谢卢克。我也想知道为什么 EF 没有抛出任何异常。

以上是关于PUT 方法不保存两个实体对象的主要内容,如果未能解决你的问题,请参考以下文章

ModelMap对象的 addAttribute,put两个方法区别

Spring Data Jpa:保存方法仅返回选择,但不执行插入

http数据传输方式 介绍

save()saveOrUpdate()merge()的区别

save()saveOrUpdate()merge()的区别

save()saveOrUpdate()merge()的区别