2015-07-20 70 views
0

我想在WPF窗口中訪問我的DbContext類型的一些靜態屬性。我以爲我可以使用,我用它來指個人實體相同XAML:爲什麼我不能使用我的DbContext類型?

<Window.Resources> 
     <entity:Account x:Key="account"/> //Works fine 
     <entity:MyEntities x:Key="myEntities"/> //Throws an error! 
    </Window.Resources> 

我得到這個錯誤:

No connection string named 'MyEntities' could be found in the application config file.

爲什麼治療的DbContext類型(MyEntities)不同於帳戶實體?有沒有簡單的方法可以訪問我的MyEntities類型的靜態屬性?

+0

聽起來就像你在你的WPF app.config中缺少MyEntities的連接字符串。 –

+1

錯誤消息非常明確。看起來在你的應用程序配置文件中,你沒有一個名爲'MyEntities'的連接字符串! – DavidG

+0

我其實有一個連接字符串(我有三個!)。沒有那一行,我的應用程序運行得很好。 –

回答

0

看來,由於我放在我的DbContext中的靜態構造函數而導致出現特定的錯誤。當我刪除靜態構造函數的錯誤更改:

Object reference not set to an instance of an object.

事實證明,原來的錯誤不會阻止我編譯和運行我的應用程序。我改變了我的代碼,使用了Scott Chamberlain的建議(它產生了一個類似的可忽略的錯誤),因爲它非常乾淨,我可以很好地訪問DbContext上的靜態屬性,儘管Visual Studio的抱怨很多。謝謝大家的幫助和建議。

0

您使用的語法是用於創建實例,而不是靜態屬性。如果您要訪問一個靜態的屬性,你需要使用x:Static標記擴展

<Window.Resources> 
    <entity:Account x:Key="account" SomeProperty={x:Static entity:MyEntities.MyProperty}/> 
</Window.Resources> 

上述XAML將類似於C#代碼

var account = new Account() 
{ 
    SomeProperty = MyEntities.MyProperty 
}; 
this.Resources["account"] = account; 

看到你打電話new Account(),如果你叫new MyEntites()(就像你最初的例子那樣),你會得到你得到的錯誤。

+0

Account是MyEntities上下文中的實體,因此不需要/不需要連接字符串。正如我在原始問題的註釋部分中所說的那樣,應用程序連接正常,並且「MyEnities」WPF行(添加爲只訪問我添加到DbContext類型的某些靜態屬性)是唯一會產生錯誤的行。 –

+0

@RandallDoser更新了答案,對不起,我誤解了。 –

+0

謝謝。我喜歡這段代碼,因爲我從中汲取了一些新的東西,但是,這實際上會產生類似的錯誤。但是,錯誤是那些不停止編譯/運行應用程序的WPF錯誤之一,當我運行它時,XAML按預期工作。我認爲這個問題實際上是我在DbContext類型上創建的靜態屬性之一,它建立了我長時間運行的上下文。它必須與Visual Studio嘗試在設計時解析此屬性,並且無法在配置文件中找到連接字符串(無論出於何種原因)。謝謝您的幫助! –

相關問題