问题
主要问题 对于跨多个窗口使用单个 dbContext 的 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;
}
}