我已经处理了好几天
概括
我正在创建一个社交网站,它将成为另一个Web应用程序的骨干。挂断是当我提交创建组的请求时一切顺利,但是如果我尝试使用不同的数据再次提交此表单,则会收到DbEntityValidationException
。例外与ApplicationUser
条目有关。
细节
当我以“调试”模式启动“应用程序”并首次提交“组创建”表单时,它将成功完成,将所有实体添加到数据库中(例外)。我已经验证了这一点,并且看起来都不错。在同一Debug会话中,我更改了表单中的信息,以创建另一个组,然后提交表单,该表单指向DbEntityValidationException
。
当我尝试插入一个SocialGroupMemberModel
包含对用户的引用以及与该组中用户状态相关的其他详细信息的时,该错误与该错误有关。用户条目被标记为,added
而EntityFramework尝试插入用户而不是更新。我试图设置导航(用户)和设置外键(UserId),两者都导致相同的错误。
HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>();
ApplicationUserManager
用来获取用户实体的控制器中,然后将其传递到存储库以创建组(无论哪种情况,传递ID或实体本身第二次都不起作用)组创建代码:
var groupInfo = new SocialGroupInfo
{
Created = DateTime.Now,
Description = model.Description,
ShortDescription = model.ShortDescription,
Name = model.Name,
Tags = TagRepo.GetTags(),
Members = new List<SocialGroupMember>()// { member }
};
var groupModel = new SocialGroupModel
{
Slug = model.Slug,
Info = groupInfo
};
Context.SocialGroups.Add(groupModel);
var member = new SocialGroupOwnerModel
{
Joined = DateTime.Now,
UserId = creator
//User = null
//Group = groupInfo
};
groupInfo.Members.Add(member);
//creator.SocialGroups.Add(member);
SaveChanges();
验证错误为:“用户名**已被使用”,因此这使我相信,在第二次尝试添加新组时,它正在尝试添加新用户。
请询问任何其他需要的信息,谢谢。
此问题是由IoC持有对先前DbContext的引用(不确定原因)引起的,但是删除了所有使用Autofac的功能即可解决此问题。
非常滑稽的解决方案,但已解决问题。
现在的问题是弄清楚为什么Autofac会采用这种方式,所有Debugging都表明每个请求都创建了类……但这是另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句