0

当数据库在带有 EF 的 WPF 中不可用时,我试图捕获异常。我在 C# 中将 MVVM 和 Repo 模式与 IUnityContainer 一起使用。

我的问题是,如果数据库不可用,程序会在视图后面的代码中的 InitializeComponent() 语句上崩溃。我已经尝试搜索捕获异常和错误处理等,并且大多数建议都围绕 Try Catch 逻辑,这是意料之中的。我试图将语句包装在如下的 try-catch 块中,但它仍然在 InitalizeComponent 的同一位置崩溃。

Public MyListView() {
    try {
        IntializeComponent();
    } catch (Exception) {
        throw;
    }    
}

我还尝试在代码的其他各个点添加 Try-Catch 块,例如初始化数据库的位置:

Database.SetInitializer(new DataInitialiser());

Unity 容器的注册位置:

_container.RegisterType<IRepo<MyList>, MyListRepo>(new TransientLifetimeManager());

以及加载数据的位置:

MyLists = new ObservableCollection<MyList>(await _repo.GetAllAsync());

我想保留 MVVM 模式,以便捕获异常并从 ViewModel 中为用户提供优雅的响应。所以我的具体问题是当数据库不可用时我在哪里可以捕获异常。

提前致谢。

4

2 回答 2

0
于 2018-06-21T11:11:02.000 回答
0

我的问题的根本原因是我破坏了封装原则。我以为我会更聪明,并在视图引用的静态类中放置一个经常在列表中引用的表。这就是为什么异常被抛出“视图模型”之外的原因——我知道初学者的错误。在我修复了 DbContext 周围的使用效果很好之后。

感谢所有的建议

于 2018-06-22T18:36:42.303 回答