【问题标题】:How to save chats to database context c#如何将聊天保存到数据库上下文c#
【发布时间】: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 =&gt; c.MessagesList).AsEnumerable();
  • MessagesDB 有一个空的构造函数,试试new MessgesDB(){Body = message, Mine = false}
  • @Chetan 是的,你是对的,你必须包括 MessagesList
  • 但是有谁知道为什么迁移是空的?
  • 你有多少个迁移文件?

标签: c# razor signalr blazor-server-side signalr-hub


【解决方案1】:

如果有人需要我想出来,这就是类:

[Serializable]
public class ChatDB
{
    [Key]
    public string? ConnectionId { get; set; }
    public string? Username { get; set; }
    public MessagesDB? MessagesDBs { get; set; }
}

[Serializable]
public class MessagesDB
{
    [Key]
    public string? Id { get; set; }
    public string? WhoIs { get; set; }
    public string? Body { get; set; }
    public bool Mine { get; set; }
    public DateTime Time { get; set; }
    public string? ConnectionId { get; set; }
    public string CSS => Mine ? "sent" : "received";
}

只需编译它,c#将通过“ConnectionId”连接这两个类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2018-09-30
    • 2015-03-06
    • 2017-11-02
    相关资源
    最近更新 更多