当前位置: 首页 > 知识库问答 >
问题:

添加新行时无法添加或更新子行

怀晋
2023-03-14

我已经看到了这个答案,并且正在使用它所建议的解决方案,但仍然得到相同的错误。

我有一个对用户表有外键约束的代理表,这是代理表:

CREATE TABLE agency (
    AgencyId                BIGINT          NOT NULL    AUTO_INCREMENT,
    UserId                  BIGINT          NOT NULL,
    AgencyName              VARCHAR(150)    NOT NULL,

    CONSTRAINT PK_Agency PRIMARY KEY(AgencyId),
    CONSTRAINT FK_Agency_User FOREIGN KEY (UserId) REFERENCES user (UserId) ON DELETE RESTRICT ON UPDATE RESTRICT
);

这是我的代理实体:

[Table("agency")]
public class Agency
{
    public long AgencyId { get; set; }

    [Required]
    public long UserId { get; set; }

    [ForeignKey("UserId")]
    public User User { get; set; } // <-- user Entity

    [Required]
    [StringLength(GlobalConstants.MaxLengthForLongName)]
    public string AgencyName { get; set; }
}

现在,我想为现有用户添加一个新代理:

public void AddOrUpdateAsAdminUser(Agency agency)
{
    if (agency.UserContact.UserId <= 0)
    {
        throw new Exception($"User: {agency.User.Email} does not exists");
    }

    if (agency.AgencyId > 0)
    {
        // update existing agency
        _context.Agency.Attach(agency);
        _context.Entry(agency).State = EntityState.Modified;
        _context.Entry(agency).Property(x => x.UserId).IsModified = false;
        _context.Entry(agency.User).State = EntityState.Detached; // <-- don't update User
    }
    else
    {
         // add new agency: exception is thrown here
        _context.Agency.Add(agency);
        _context.Entry(agency.User).State = EntityState.Detached; // <-- Don't update User
    }

    _context.SaveChanges();
}

<代码>\u上下文。SaveChanges() 行引发以下异常

"无法添加或更新子行:外键约束失败(\"dbName\".\"agent\", CONSTRAINT\"FK_Agency_User\"FOREIGN KEY(\"UserId\")REFERENCES\"user\"(\"UserId\"))"

系统异常{MySql.Data.MySqlClient.MySqlException}

共有2个答案

施阎宝
2023-03-14

问题在于我的映射逻辑,当将代理视图模型映射到代理时,我只是将用户视图模型映射到用户。。。这意味着当我想保存代理时,UserId是0(未映射)。

[Table("agency")]
public class Agency
{
    public long AgencyId { get; set; }

    [Required]
    public long UserId { get; set; }  // <-- I was NOT mapping UserId

    [ForeignKey("UserId")]
    public User User { get; set; } // <-- I was mapping User

    [Required]
    [StringLength(GlobalConstants.MaxLengthForLongName)]
    public string AgencyName { get; set; }
}
井洲
2023-03-14

您会收到此错误,因为您正在尝试向代理添加/更新一行,该行没有基于当前存储在表1中的值的UserID字段的有效值。

 类似资料:
  • com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法添加或更新子行:外键约束失败(.,constraint外键()引用()

  • com.mysql.jdbc.exceptions.jdbc4、无法添加或更新子行:外键约束失败(。,CONSTRAINTFOREIGN KEY()REFERENCES()) 艺术家班 和RecordLabel类

  • 我有两个表,当我试图保存通常的实体,扔 组织。springframework。刀。DataIntegrityViolationException:无法添加或更新子行:外键约束失败(,约束外键(,)引用(,));SQL[n/a];约束[null];嵌套的异常是org。冬眠例外ConstraintViolationException:无法添加或更新子行:外键约束失败(,constraint外键(,)参

  • 问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使

  • 我知道在这个问题上有很多问题,但我一直未能解决。我正在做一个图形界面来添加/删除员工和管理缺勤。 我一直在阅读和测试那些建议stackOverflow1,但我不能更改数据库,因为它已经由我们的教授给出了。 来自外键的值已经在表“service”中,我在代码中称之为“department”。 我有以下数据库(对于我得到问题的表): 在应用程序中,您可以看到这里和下面的图片,我必须修改员工数据,并将其

  • 当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT