尝试在连续请求中更新数据库时发生意外行为-EF 6

克雷格·罗素

我已经处理了好几天

概括

我正在创建一个社交网站,它将成为另一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF 6数据库优先:如何更新存储过程?

来自分类Dev

EF 6数据库优先:如何更新存储过程?

来自分类Dev

EF 6 更新数据库失败,提供程序

来自分类Dev

是否可以从EF版本低于6的EF拦截对EF数据库的查询?

来自分类Dev

EF6数据库优先-EF尝试创建我的数据库(但所有表已存在)

来自分类Dev

更新EF6时需要属性

来自分类Dev

我可以在EF 6中进行更新数据库的试运行吗?

来自分类Dev

EF6,Windows服务和数据库轮询

来自分类Dev

EF6数据库首先使存储过程异步

来自分类Dev

EF6-TPT-继承-数据库优先

来自分类Dev

EF6,Windows服务和数据库轮询

来自分类Dev

无法使用EntityState更新EF 6 DbContex。

来自分类Dev

EF6忽略相关数据

来自分类Dev

在 EF6 中使用数据注释

来自分类Dev

首先在EF6数据库中模拟数据库

来自分类Dev

在EF 6中设置命令超时

来自分类Dev

EF6在查询中插入“ \ n”?

来自分类Dev

在EF 6中使用.Contains()

来自分类Dev

EF 6中SetModifiedProperty的替代方法

来自分类Dev

EF6在查询中插入“ \ n”?

来自分类Dev

EF6迁移(LocalDb)更新数据库登录失败

来自分类Dev

EF6代码优先:更新数据库登录失败

来自分类Dev

无法使用EF 6和Visual Studio 2015 Update 3从数据库更新模型

来自分类Dev

当我用EF6查询数据库时,使用LINQ有什么优势?

来自分类Dev

EF 6当数据库没有显式关系时如何正确映射

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

从集合中删除对象后,如何使EF6从数据库中删除对象?

来自分类Dev

尝试连接ODAC EF6时出错