C# 刷新、处理和重新创建EF DB

C# 刷新、处理和重新创建EF DB,c#,sql,multithreading,visual-studio,entity-framework,C#,Sql,Multithreading,Visual Studio,Entity Framework,因此,我正在使用实体框架、c#和Azure创建一个简单的消息传递应用程序。这是我的模式 public class UserContext : DbContext { public UserContext() : base("name=Official") { } public DbSet<User> Users { get; set; } public DbSet<Message> Messages { get; set; } } pu

因此,我正在使用实体框架、c#和Azure创建一个简单的消息传递应用程序。这是我的模式

public class UserContext : DbContext {
    public UserContext() : base("name=Official") {

    }
    public DbSet<User> Users { get; set; }
    public DbSet<Message> Messages { get; set; }
}

public class User {
    [Key]
    public string username { get; set; }
    public string password { get; set; }
    //public int test { get; set; }

    public virtual ICollection<User> friends { get; set; }

    public virtual ICollection<Message> SentMessages { get; set; }
    public virtual ICollection<Message> ReceivedMessages { get; set; }

    public static implicit operator User(bool v) {
        throw new NotImplementedException();
    }

    public override string ToString() {
        return username;
    }
}

public class Message {
    [Key]
    public int ID { get; set; }

    public virtual User sender { get; set; }
    public virtual User recipient { get; set; }
    public virtual Group group { get; set; }

    public string content { get; set; }

    public int TimeSent { get; set; }
}

public class Group {
    [Key]
    public int ID { get; set; }

    public virtual ICollection<User> members { get; set; }
    public virtual ICollection<Message> messages { get; set; }
}
我有一个对话表单,它基本上是主屏幕,它看起来像这样:

我遇到的问题是找到一种更新程序的方法,以便在程序运行时发送给您的新消息显示在右侧的文本框中

每当用户更改右侧列表框中的选定项(甚至单击空白处)时,我通过处理和重新创建DB对象来“解决”它。显然,这不是最好的方法,现在我想实现系统托盘通知,这样如果程序最小化到任务栏,您就可以看到是否收到了新的通知

现在,关于问题: 用户无需做任何事情就可以弹出新消息的最佳方式是什么?

您可以使用计时器
根据您选择的时间间隔,在计时器滴答声中,您可以检查数据库并添加最新记录并显示它

例如:

您还可以使用SqlDependency,这对我来说不太好(可能只是我正在处理的情况)。

您可以使用计时器
根据您选择的时间间隔,在计时器滴答声中,您可以检查数据库并添加最新记录并显示它

例如:


你也可以使用SqlDependency,这对我来说不太好(可能只是我正在处理的情况)。

你可以使用Signal,因为它支持AFAIK WinForms/WPF。@maccettura正在研究这个问题。我认为@maccettura建议的中间层是首选,但如果你不能或不愿意使用它,您可以研究在EF中映射SQLDependency。请参阅:您可以使用SignalR,因为支持AFAIK WinForms/WPF。@maccettura现在正在研究这个问题。我认为@maccettura建议的一些中间层是首选的,但是如果您不能或不愿意使用它,您可以研究在EF中映射SQLDependency。见:
public static UserContext db = new UserContext();