未保存的关联模型类一直返回 null
Posted
技术标签:
【中文标题】未保存的关联模型类一直返回 null【英文标题】:Associated Model class not being saved keeps returning null 【发布时间】:2022-01-04 13:27:31 【问题描述】:我的Ticket
模型中有一个User
模型,但每次我尝试在Ticket
模型中设置User
时,当我稍后尝试检索它时,它总是最终成为null
打开,我似乎无法弄清楚为什么。
目标是能够创建Ticket
,创建时您可以输入用户名以将此票证与某人相关联。如果找到用户,则创建票证。
但是,它似乎没有保存输入的关联User
或任何相关信息。
型号
public class Ticket
[Key]
public Guid Id get; set;
[Required]
public string Title get; set;
public User owningUser get; set;
public class User
public Guid UserId get; set;
[Required]
public string Username get; set;
public List<Ticket> assignedTickets get; set;
创建.razor
<InputText id="title" @bind-Value="@ticketItem.owningUser.Username" class="form-control" aria-label="Disabled input example" />
private Ticket ticketItem get; set; = new Ticket();
protected override async Task OnInitializedAsync()
ticketItem.owningUser = new User();
public async Task CreateNewTodoItem()
var result = await Http.PostAsJsonAsync("TodoItems", ticketItem);
控制器
public async Task <ActionResult> CreateNewTodoItem(Ticket item)
ApplicationUser userValid;
User tempUser = new User();
try
userValid = userManager.Users.Where(s => s.Email == item.owningUser.Username).First();
item.owningUser = new User();
item.owningUser.Username = userValid.Email;
context.Tickets.Add(item);
await context.SaveChangesAsync();
return NoContent();
catch (InvalidOperationException)
return BadRequest();
检索方法
private User associatedUser get; set;
[Parameter]
public Guid Id get; set;
protected override async Task OnInitializedAsync()
ticketItem = await Http.GetFromJsonAsync<Ticket>($"TodoItems/Id");
associatedUser = await Http.GetFromJsonAsync<User>($"User/Id");
ticketItem.owningUser = associatedUser;
// Controller ---
[HttpGet("ticketID")]
public async Task<ActionResult<User>> GetUserForTicket(Guid ticketID)
var ticketUser = context.Tickets.First(p => p.Id == ticketID);
User use = new User Username = ticketUser.owningUser.Username ;
return Ok(use);
空错误
数据库上下文
public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
public ApplicationDbContext(
DbContextOptions options,
IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
public DbSet<Company> Companies get; set;
public DbSet<Ticket> Tickets get; set;
public DbSet<Project> Projects get; set;
public DbSet<User> Users get; set;
【问题讨论】:
嗨@Krellex,你的ApiAuthorizationDbContext
是什么?请调试您的代码并检查 ticketUser 是否包含 owningUser 的值,同时在数据库中检查它。
【参考方案1】:
你必须包含 owningUser
var ticketUser = context.Tickets.Include(o=> o.owningUser).First(p => p.Id == ticketID);
if(ticketUser.owningUser!=null)
return new User Username = ticketUser.owningUser.Username ;
return BadRequest("no owningUser");
但可能是 owningUser 为 null 或者您的 dbcontext 配置不正确,因为我可以看到您的 Create 操作根本没有任何意义。
【讨论】:
感谢您的建议。我试过了,但似乎出现了同样的空错误 感谢您的进一步更改。错误仍然存在,但就像您提到的那样, owningUser 可能为 null,因为它没有被保存。我不确定为什么它似乎没有保存关联的用户。我已经编辑了上面的帖子以通过 ApplicationDBContext 显示以上是关于未保存的关联模型类一直返回 null的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data JPA:保存嵌套的 OneToMany 子级(具有级联)返回 NULL 父级外部对象