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;
}
}
由于您始终使用相同的MyDbType
实例,因此无需为每个窗口Load
MyTable1
。