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
并具有自动生成的值吗? Person
和 MemberComment
之间是否有外键?另外,我看不到您实际在哪里使用 id
的 Put
方法。
【参考方案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:保存方法仅返回选择,但不执行插入
save()saveOrUpdate()merge()的区别