为什么Entity Framework将重复记录插入表中

时间:2014-11-13 18:24:44

标签: asp.net-mvc-4 entity-framework-6

出于某种原因.Net Entity Framework将多个重复记录插入到我的数据库中名为groups的表中。当用户登录并访问组索引页时,似乎正在发生这种情况。

以下是我的Index页面控制器代码的代码片段,以及Group的DataContext get方法和更新方法。

我没有看到这里的错误,因为我只是建立一个模型并将其返回到Index视图。有人有什么建议吗?我正在使用MVC 4,实体框架6。

记录截图:它继续像这样50行。 enter image description here

索引视图控制器

    [Authorize(Roles = "Standard, Administrator")]
    public ActionResult Index()
    {

        int _userId = WebSecurity.CurrentUserId;
        var model = new GroupIndexModel();

        if (Roles.GetRolesForUser().Contains("Administrator"))
        {
            ViewBag.Role = "Administrator";
            var modelList = model.BuildIndexModel(_ctx.Groups.GetAllGroups());
            modelList.CampaignTemplates = _ctx.Templates.GetAllCampaignTemplateList();
            modelList.ProcedureTemplates = _ctx.Templates.GetAllProcedureTemplateList(); 

            return View(modelList);

        }
        else
        {
            ViewBag.Role = "Standard";
            var userGroups = _ctx.ManyToManyRelationShips.GetUserGroups(_userId);
            var modelList = model.BuildIndexModel(_ctx.ManyToManyRelationShips.GetGroupsEntitiesForUser(userGroups));

            foreach( var group in modelList.GroupObjects)
            {
                modelList.CampaignTemplates = _ctx.Templates.GetAllCampaignTemplateList().FindAll(p => p.GroupID == group.GroupId);
            }


            var tempProcTemplateList = _ctx.Templates.GetAllProcedureTemplateList();

            foreach (var cTemplate in modelList.CampaignTemplates)
            {
                modelList.ProcedureTemplates.AddRange(tempProcTemplateList.FindAll(p => p.CampaignTemplateID == cTemplate.CampaignTemplateId));
            }

            return View(modelList);
        }

    }

群组管理员(获取,GetAll,添加,更新功能)  public Group Get(int groupId)         {

        try
        {
            var group = new Group();
            var temp = _ctx.Groups.First(p => p.GroupId == groupId);

            if (temp != null)
            {
                group.GroupId = temp.GroupId;
                group.CompanyName = temp.CompanyName;
                group.Email = temp.Email;
                group.PhoneNumber = temp.PhoneNumber;
                group.CreatedDate = temp.CreatedDate;
                group.LastModifiedDate = temp.LastModifiedDate;

            }
            return group;
        }
        catch (Exception ex)
        {
            logger.Error("An Error occured getting a group", ex);
            // Console.WriteLine("An Error occured getting a group" + System.Environment.NewLine + ex);
            return null;
        }
    }

    public List<Group> GetAllGroups()
    {
        try
        {
            var groupList = _ctx.Groups.OrderBy(p => p.CompanyName).ToList<Group>();

            return groupList;
        }
        catch (Exception ex)
        {
            logger.Error("An Error occured getting groups", ex);
            //Console.WriteLine("An Error occured getting groups" + System.Environment.NewLine + ex);
            return null;
        }

    }


    public int Add(Group eGroup)
    {
        int newGroupId;

        try
        {
            _ctx.Groups.Add(eGroup);
            _ctx.SaveChanges();
            newGroupId = eGroup.GroupId;

            return newGroupId;
        }
        catch (Exception ex)
        {
            logger.Error("An Error occured adding group", ex);
            //Console.WriteLine("An Error occured adding group" + System.Environment.NewLine + ex);
            return -1;
        }
    }

    public void UpdateGroup(Group eGroup)
    {
        try
        {
            var updev = _ctx.Groups.First(p => p.GroupId == eGroup.GroupId);

            if (updev.CompanyName != eGroup.CompanyName)
                updev.CompanyName = eGroup.CompanyName;

            if (updev.Email != eGroup.Email)
                updev.Email = eGroup.Email;

            if (updev.PhoneNumber != eGroup.PhoneNumber)
                updev.PhoneNumber = eGroup.PhoneNumber;

            updev.LastModifiedDate = DateTime.Now;

            _ctx.SaveChanges();
        }
        catch (Exception ex)
        {
            logger.Error("An Error occured updating group", ex);
            //  Console.WriteLine("An Error occured updating group" + System.Environment.NewLine + ex);
            return;
        }
    }

0 个答案:

没有答案