使用实体框架的 Postgres 更新错误

Postgres update error using Entity Framework

提问人:Felipe Melo 提问时间:11/16/2023 最后编辑:marc_sFelipe Melo 更新时间:11/16/2023 访问量:24

问:

我在更新实体框架中具有多对多关系的实体时遇到问题。

这是我的实体,它将许多配置文件链接到子菜单。

public class ProfilesSubMenus : BaseEntity
{
    public Guid ProfileId { get; private set; }
    [JsonIgnore]
    public Profile? Profile { get; private set; }
    public Guid SubMenuId { get; private set; }
    [JsonIgnore]
    public SubMenu? SubMenu { get; private set; }
}

这是我的实体:Profile

public class Profile : BaseEntity
{
    public string Name { get; private set; }
    public List<User>? Users { get; private set; }
    public List<ProfilesSubMenus>? ProfilesSubMenus { get; private set; }
}

这是我的实体:SubMenu

public class SubMenu : BaseEntity
{
    public Guid MenuId { get; private set; }
    public Menu Menu { get; private set; }
    public string Icon { get; private set; }
    public string Name { get; private set; }
    public string Path { get; private set; }
    public List<ProfilesSubMenus>? ProfilesSubMenus { get; private set; }
}

这是我的更新方法:

public async Task<ProfileOutput> Handle(UpdateProfileInput input)
{
        var profile = await _profileRepository.GetById(input.Id);
        profile!.Update(input.Name);
        var profilesSubMenus =
            input.ProfilesSubMenus.Select(x => new ProfilesSubMenus(x.SubMenuId,    profile!.Id)).ToList();
        profile.AddProfilesSubMenus(profilesSubMenus);
        await _unitOfWork.Commit();

        return ProfileOutput.FromOutput(profile);
}

它根据输入接收的 ID 在数据库中搜索配置文件,然后调用配置文件类中存在的 update 方法。

public void Update(string name)
{
    Name = name;
    UpdatedAt = DateTime.UtcNow;
    Validate();
}

紧接着,它将输入接收的 subMenus 映射到 subMenu 实体,并调用将这些 subMenus 添加到配置文件的方法。

public void AddProfilesSubMenus(List<ProfilesSubMenus> profilesSubMenus)
{
    if (profilesSubMenus != null && profilesSubMenus.Count < 0)
        throw new EntityValidationException("Sub menus is required");

    ProfilesSubMenus = profilesSubMenus;
}

在整个过程之后,这是要保存的对象。

{
  "id": "d8aa0ec8-9e0f-4d68-b784-871e00949248",
  "name": "Administrador1",
  "profilesSubMenus": [
    {
      "subMenuId": "9a6f7ab0-9a42-4ba7-a69c-270983722517",
      "profileId": "d8aa0ec8-9e0f-4d68-b784-871e00949248"
    },
    {
      "subMenuId": "a5dfbaae-9481-4639-a763-328c682f63ce",
      "profileId": "d8aa0ec8-9e0f-4d68-b784-871e00949248"
    },
    {
      "subMenuId": "f6efd7f1-9887-4a85-a163-da546bf23c58",
      "profileId": "d8aa0ec8-9e0f-4d68-b784-871e00949248"
    }
  ]
}

但是他什么时候会承诺给银行

public async Task Commit()
{
    await _context.SaveChangesAsync();
}

我收到错误

数据库操作预计会影响 1 行,但实际上影响了 0 行;自加载实体以来,数据可能已被修改或删除

C# asp.net PostgreSQL 实体框架

评论


答: 暂无答案