Asp.net mvc 4 为什么实体框架将重复记录插入表中

Asp.net mvc 4 为什么实体框架将重复记录插入表中,asp.net-mvc-4,entity-framework-6,Asp.net Mvc 4,Entity Framework 6,出于某种原因,.Net实体框架正在将多个重复记录插入数据库中名为groups的表中。这似乎是在用户登录并访问组索引页时发生的 下面是我的索引页控制器代码的代码片段,以及组的DataContext get方法和update方法 我没有看到这里有什么问题,因为我只是构建一个模型并将其返回到索引视图。有人有什么建议吗?我使用的是MVC4,实体框架6 记录的屏幕截图:像这样持续50行。 索引视图控制器 组管理器Get、GetAll、Add、Update函数 公共组Getint groupId {

出于某种原因,.Net实体框架正在将多个重复记录插入数据库中名为groups的表中。这似乎是在用户登录并访问组索引页时发生的

下面是我的索引页控制器代码的代码片段,以及组的DataContext get方法和update方法

我没有看到这里有什么问题,因为我只是构建一个模型并将其返回到索引视图。有人有什么建议吗?我使用的是MVC4,实体框架6

记录的屏幕截图:像这样持续50行。

索引视图控制器

组管理器Get、GetAll、Add、Update函数 公共组Getint 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;
        }
    }

问题似乎不在你发布的这段代码中。我相信这可能是在你用来填充Add或Update方法对象的某个方法中。我的意思是:User.City=new CityToronto;而不是User.CityID=50;第一个方法将在City表中创建一个新记录。我相信在你代码的其他地方也会发生同样的情况。如果你确定不会发生这种情况,请忽略注释。酷,我会四处看看,看看我是否在这样做。我查看了我的代码,我没有这种类型的用户的实例。City=new CityToronto;好的,那么忽略我的注释。我这样说是因为每当我看到这样的错误,我总是会发现这样的错误。我也有同样的问题。当我的代码通过r this.Context.SaveChanges;DB表中的记录被写入两次。
        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;
        }
    }