刷新或处理并重新创建EF DB

时间:2017-10-06 20:36:51

标签: 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; }
}

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在UniversalStuff类中声明一次,我在整个程序中随处访问它。

public static UserContext db = new UserContext();

所以我有一个基本上是主屏幕的Conversations Form,它看起来像这样: enter image description here

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

我&#34;解决了#34;每次用户更改右侧列表框中的选定项目(甚至点击空格)时,都会通过处理和重新创建数据库对象来实现它。显然,这不是最好的方法,现在我想实现系统托盘通知,所以如果程序最小化到任务栏,你可以看到你是否收到了新的通知。

现在,关于这个问题: 如果用户不必做任何事情,最好的方法是弹出新消息?

1 个答案:

答案 0 :(得分:2)

您可以使用计时器https://msdn.microsoft.com/en-us/library/system.windows.forms.timer(v=vs.110).aspx https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/timer-component-windows-forms
根据您选择的时间间隔计时器,您可以检查数据库并获取最新记录并显示它。

示例:https://stackoverflow.com/a/23137100/20126

您也可以使用与我不兼容的SqlDependency https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/detecting-changes-with-sqldependency(可能就在我的情况下,我正在处理)。