未保存的关联模型类一直返回 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的主要内容,如果未能解决你的问题,请参考以下文章

Yii uuid 模型保存为主键返回 null

Spring Data JPA:保存嵌套的 OneToMany 子级(具有级联)返回 NULL 父级外部对象

Laravel 类型提示,模型保存时 id 返回 null

hibernate级联修改之后接着查询时,查不出来?,用hibernate做的返回对象为null,求解

laravel 关联模型中withDefault方法的作用

firebase 数据库和存储为图像返回 null