背景,这是一个WPF项目,它使用实体框架,当运行时工作正常,它只是设计者给出以下错误。
未处理的异常 指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。
我已将连接字符串应对到UI,但这仍然是一个问题
我有以下绑定
DataContext="{Binding Source={x:Static ViewModel:ViewModelLocator.MainWindowViewModelStatic}}"
与初始化
的类有关 new MainWindowViewModel(new UIDataProvider());
有以下
private readonly IUIDataProvider _dataProvider;
private IList<Customer> _customers;
public IList<Customer> Customers
{
get
{
if (_customers == null)
{
GetCustomers();
}
return _customers;
}
}
public MainWindowViewModel(IUIDataProvider dataProvider)
{
_dataProvider = dataProvider;
Tools = new ObservableCollection<ToolViewModel>();
Tools.Add(new AToolViewModel());
Tools.Add(new BToolViewModel());
}
private void GetCustomers()
{
_customers = _dataProvider.GetCustomers();
}
答案 0 :(得分:2)
设计师实际上在设计时实例化你的代码。在实例化时,您的代码会尝试访问您的数据,因此实体框架代码正在查找连接字符串的错误位置。解决方案是在设计模式下不这样做。
天真的方法是检查DesignerProperties.GetIsInDesignMode。这不是真正的MVVM,因为您必须在视图模型中检查它,并将UI代码注入视图模型。
解决方案是什么?你可以抓住你的鼻子(快速和脏),创建一个可注入的接口,从ViewModel中抽象出这个检查,默认情况下是一个检查DependencyProperty的实现,或者你捕获异常并优雅地吞下它。