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

时间:2014-12-20 06:04:48

标签: c# asp.net-mvc entity-framework

我已经处理了好几天

摘要

我正在创建一个社交网站,它将成为另一个Web应用程序的骨干。挂断是指我提交创建组的请求一切顺利,但如果我尝试使用不同的数据再次提交此表单,我会得到DbEntityValidationException。该例外与ApplicationUser条目有关。

详情

当我在调试模式下启动应用程序并首次提交组创建表单时,它将成功,将所有实体添加到数据库中作为例外。我已经验证了这一切,看起来很好看。在同一个Debug会话中,我更改表单中的信息,创建另一个组,然后提交表单,这将导致DbEntityValidationException

当我尝试插入包含对用户的引用的SocialGroupMemberModel以及与该组中的用户状态相关的其他详细信息时,该错误与此相关。用户条目被标记为added,EntityFramework正在尝试插入用户而不是更新。我试图设置导航(用户)并设置ForeignKey(UserId),两者都导致相同的错误。

  • 我正在使用HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>();
  • 在Controller中我使用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();

验证错误是:“用户名**已被占用”,因此这让我相信在第二次尝试添加新组时,它会尝试添加新用户。

请询问所需的任何其他信息,谢谢。

2 个答案:

答案 0 :(得分:0)

尝试重新选择用户并再次附加,看看它是否有效?

    var member = new SocialGroupOwnerModel
    {
        Joined = DateTime.Now,
        UserId = creator
        User = UserManager.FindById(creator)
        //Group = groupInfo
    };

答案 1 :(得分:0)

此问题是由IoC持有对前一个DbContext的引用引起的,不确定原因,但删除所有Autofac用法修复了该问题。

非常虎头蛇尾的解决方案,但问题已解决......

现在的问题是弄清楚为什么Autofac会以这种方式运行,所有Debugging都显示每个请求都创建了类......但这是另一个问题。