【问题标题】:Associated Model class not being saved keeps returning null未保存的关联模型类一直返回 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 的值,同时在数据库中检查它。

标签: c# asp.net-core blazor blazor-webassembly asp.net-blazor


【解决方案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 显示
猜你喜欢
  • 2021-01-25
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多