【发布时间】:2022-08-17 02:25:04
【问题描述】:
我正在尝试将聊天记录保存在数据库中,但我认为我遗漏了某些部分。
上下文被初始化:
public DbSet<ChatDB>? Chats { get; set; }
这是课程:
[Serializable]
public class ChatDB
{
[Key]
public string? ConnectionId { get; set; }
public string? Username { get; set; }
public List<MessagesDB> MessagesList { get; set; }
}
[Keyless]
[NotMapped]
public class MessagesDB
{
public string? Body { get; set; }
public bool Mine { get; set; }
public string CSS => Mine ? \"sent\" : \"received\";
}
在这里,当服务器接收到消息时,我将消息添加到数据库中:
var FindUser = _context.Chats!.AsEnumerable();
foreach(var chat in FindUser)
{
if(chat.Username == sender)
{
var messageslist = new MessagesDB(message, false);
chat.MessagesList.Add(messageslist); //Here it gives me error - returned null.
_context.Entry(chat).State = EntityState.Modified;
await _context.SaveChangesAsync();
}
}
当我通过用户名浏览所有聊天时:
var FindUser = _context.Chats.AsEnumerable();
foreach (var chat in FindUser)
{
if (chat.Username == PassUserNameClicked)
{
foreach(var messages in chat.MessagesList)
{
<div class=\"@messages.CSS\">
<div class=\"user\">@chat.Username</div>
<div class=\"msg\">@messages.Body</div>
</div>
}
}
}
当我构建迁移时,它给了我所有的空:
public partial class AddChatsToDb : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
你们不知道这是怎么回事吗?我相信班级内的“列表”打破了迁移。
-
看起来
MessagesList为 NULL。您需要在从数据库中检索图表列表时包含此属性。var FindUser = _context.Chats.Include(c => c.MessagesList).AsEnumerable(); -
MessagesDB 有一个空的构造函数,试试
new MessgesDB(){Body = message, Mine = false} -
@Chetan 是的,你是对的,你必须包括 MessagesList
-
但是有谁知道为什么迁移是空的?
-
你有多少个迁移文件?
标签: c# razor signalr blazor-server-side signalr-hub