【发布时间】:2020-09-11 11:14:54
【问题描述】:
所以我这里有 2 节课:
public class User
{
[Key]
public int UserId { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Message> Messages { get; set; }
}
和
public class Message
{
[Key]
public int MessageId { get; set; }
public string MessageContent { get; set; }
public DateTime DateCreated { get; set; }
public int SenderId { get; set; }
public int ReceiverId { get; set; }
}
我正在尝试通过以下控制器操作创建一条消息,该操作创建一条新消息并将其添加到数据库中,然后更新数据库中的 ICollectionMessages。
这里是控制器:
[Route("sendMessage")]
[HttpPost]
public async Task SendMessage([FromBody] Message message)
{
var newMessage = new Message
{
MessageContent = message.MessageContent,
DateCreated = DateTime.Now,
SenderId = message.SenderId,
ReceiverId = message.ReceiverId
};
_dbContext.Messages.Add(newMessage);
var user = _dbContext.Users.SingleOrDefault(x => x.UserId == message.SenderId);
if(user != null)
{
var userMessages = user.Messages.ToList();
userMessages.Add(newMessage);
}
await _dbContext.SaveChangesAsync();
}
但是我得到一个“对象引用未设置为对象的实例。”错误,我相信这是因为 'var userMessages = user.Messages.ToList();'为 NULL,因此无法向空列表添加值。
有一个巨大的脑雾,有人可以提出解决这个问题的方法吗?
编辑:
我的目标是更新 USERID:
【问题讨论】:
-
您需要为用户
_dbContext.Users.Include(u => u.Messages).SingleOrDefault(x => x.UserId == message.SenderId);显式加载消息 -
我认为你在
messages集合的副本中添加了一条消息(因为ToList),所以尝试做user.Messages.Add(newMessage) -
太棒了!非常感谢您的出色工作!
标签: c# asp.net linq entity-framework-core asp.net-core-webapi