【问题标题】:entity framework Add Entity adds child entities as well实体框架添加实体也添加子实体
【发布时间】:2011-08-03 14:50:41
【问题描述】:

我有一个表“Training”,其中有一列“CreatedBy”,它对“User”表具有引用完整性。所以“CreatedBy”实际上是一个“User”,代表插入训练记录的用户。

现在,当我添加一个新的“Training”实体时,它的“CreatedBy”是一个旧的“User”。所以它也不应该尝试添加用户。但它确实如此,因此失败了,因为它违反了唯一键约束。

这是代码。我哪里错了?

    public int AddEntity(Training entity, bool isSaveInstantly)
    {
        this.trainersDeskDBModel.Trainings.AddObject(entity);

        if (isSaveInstantly)
        {
            this.trainersDeskDBModel.SaveChanges();
        }
        return entity.Id;
    }

    public int UpdateEntity(Training entity, bool isSaveInstantly)
    {
        this.trainersDeskDBModel.Trainings.ApplyCurrentValues(entity);
        if (isSaveInstantly)
        {
            this.trainersDeskDBModel.SaveChanges();
        }
        return entity.Id;
    }

    public int Save(Training entity, bool isSavedInstantly)
    {
        IEnumerable<Training> training = this.trainersDeskDBModel.Trainings.Where(x => x.Id == entity.Id);
        if (training != null && training.Count() > 0)
        {
            this.UpdateEntity(entity, isSavedInstantly);
        }
        else
        {
            this.AddEntity(entity, isSavedInstantly);
        }
        return entity.Id;
    }

【问题讨论】:

    标签: .net entity-framework entity-framework-4 entities


    【解决方案1】:

    如果您没有在添加新Training 的同一上下文中加载User,您必须在添加之前通过将User 附加到上下文中来告知数据库中已经存在User新的Training

    public int AddEntity(Training entity, bool isSaveInstantly)
    {
        this.trainersDeskDBModel.Users.Attach(entity.CreatedBy);
        this.trainersDeskDBModel.Trainings.AddObject(entity);
    
        if (isSaveInstantly)
        {
            this.trainersDeskDBModel.SaveChanges();
        }
        return entity.Id;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多