Entity Framework & WPF - 何时需要 dbContext.Load()

本文关键字:dbContext Load 何时需 Framework amp WPF Entity | 更新日期: 2023-09-27 18:31:54

问题

主要问题 使用跨多个窗口使用单个数据库上下文的 WPF 应用程序;创建 CollectionViewSource 的每个窗口都需要 dbContext.Load() 吗?如果不需要,那么如何解决它?

如果这个问题不清楚,我创建了一个简单的例子,希望能说明问题。下面我创建了一个简化的小示例。

我问这个是因为我希望减少窗口加载时间,尽管情况可能是这样。如果存在某种本地缓存,通过为每个窗口执行加载,我是否会导致性能下降?

跟进问题 如果不是,是否需要在主窗口中包含某种内容才能加载关系部件?

使用

MainWindow 的 WPF 应用程序声明一个 dbContext "MyDbType";当每个 NewSubWindow 使用 .ShowDialog() 以打开。每个新窗口都传递 dbContext。所有窗口都在其 XAML 中声明一个 CollectionViewSource。

分贝定义

//The context
public class MyDbType : DbContext
{
    public DbSet<MyType1> MyTable1 { get; set; }
    public DbSet<MyType2> MyTable2 { get; set; }
}
// The main type
public class MyType1
{
    public int Id { get; set; }
    public string Tag { get; set; }
    public virtual ObservableCollection<MyType2> BunchOf2s { get; set; }
}
// A relational sub type
public class MyType2
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual MyType1 MyParent { get; set; }
}

WPF 主窗口

public partial class MainWindow : Window
{
    public MyDbType db = new MyTypeDb();
    ....
    ...
    ...
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        myDb1ViewSource = ((CollectionViewSource)(this.FindResource("myDb1ViewSource")));
        db.MyTable1.Load();
        myDb1ViewSource.Source = db.MyTable1.Local;
    }
    public OpenNewWindow()
    {
        NewSubWindow newWin = new NewSubWindow(db);
        newWin.Owner = this;
        newWin.ShowDialog();
    }
}

子窗口

public partial class NewSubWindow : Window
{
    private MyDbType db;
    public NewSubWindow(MyDbType Db)
    {
        db = Db;
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        myDb1ViewSource = ((CollectionViewSource)(this.FindResource("myDb1ViewSource")));
        db.MyTable1.Load(); // ----- DOES THIS SECOND WINDOW NEED THIS? OR IS IT JUST SLOWING THINGS DOWN?
        myDb1ViewSource.Source = db.MyTable1.Local;
    }
}

Entity Framework & WPF - 何时需要 dbContext.Load()

由于您始终使用相同的MyDbType实例,因此无需为每个窗口Load MyTable1