提问人:Felipe Melo 提问时间:11/16/2023 最后编辑:marc_sFelipe Melo 更新时间:11/16/2023 访问量:24
使用实体框架的 Postgres 更新错误
Postgres update error using Entity Framework
问:
我在更新实体框架中具有多对多关系的实体时遇到问题。
这是我的实体,它将许多配置文件链接到子菜单。
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 行;自加载实体以来,数据可能已被修改或删除
答: 暂无答案
评论