尝试在连续请求中更新数据库时出现意外行为 - EF 6
本文关键字:意外 EF 连续 请求 数据库 更新 | 更新日期: 2023-09-27 18:34:50
我已经处理了好几天了
总结
我正在创建一个社交网站,它将成为另一个Web应用程序的骨干。挂断是当我提交创建组的请求时一切顺利,但是如果我尝试使用不同的数据再次提交此表单,我会得到DbEntityValidationException
.异常与ApplicationUser
条目相关。
详
当我在调试模式下启动应用程序并首次提交组创建表单时,它将成功,将所有实体添加到数据库中,但除外。我已经验证了这一点,一切看起来都不错。在同一个调试会话中,我更改表单中的信息以创建另一个组,然后提交表单,这会导致DbEntityValidationException
。
当我尝试插入包含对用户的引用以及与组中用户状态相关的其他详细信息的SocialGroupMemberModel
时,该错误是相关的。用户条目被标记为added
并且实体框架正在尝试插入用户而不是更新。我尝试设置导航(用户(和设置外键(用户ID(,两者都会导致相同的错误。
- 我正在使用
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 会以这种方式运行,所有调试都显示每个请求都创建了类......但这是另一个问题。