2017-05-19 9 views
0

私は最近、私の会社がビジネスを行うために使用する大きなプログラムを書き直しました。私はEntity Frameworkを早い段階に変更しました。ほとんどの場合、それはかなりうまくいっています。エンティティフレームワーク、カスタムコントロール、およびxという名前の接続文字列がまだ実行されない

かなりの時間私を悩ませていた今、私は見て時間がありますが、データベースから質問を引き出すカスタムコントロールは、奇妙なエラーの原因となります。

カスタムコントロールでSQLを使用すると、デザイナーのフォーム表示に問題が実際に表示されます。最初はこれはかなり涼しく、私はそれが好きだった。私はデザイナーでフォームをロードしたとき、それはEntity Frameworkの6を使用するように切り替えた後、私はエラー

は「wotcDB」という名前なしの接続文字列は、アプリケーション 設定ファイルに見つかりませんでした取得します。

これは完全にapp.configファイル内にあります。実際、このプログラムは問題なくコンパイルと実行に問題はありません。一番長い間、私は無視してフォームに取り掛かります。もちろん、質問はデザイナーには表示されません。

ユーザーコントロールはアプリケーションの一部です。 app.configファイルはそこにあり、プログラムは実行され、うまく展開されます。これは何の原因ですか?

私のapp.config #######は機密データです。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="webDB" connectionString="metadata=res://*/Data.webDB.csdl|res://*/Data.webDB.ssdl|res://*/Data.webDB.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;user id=#######;password=#######;server=#######;database=#######;persistsecurityinfo=True&quot;" 
     providerName="System.Data.EntityClient" /> 
    <add name="wotcDB" connectionString="metadata=res://*/Data.wotcDB.csdl|res://*/Data.wotcDB.ssdl|res://*/Data.wotcDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=#######;initial catalog=#######;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="mssqllocaldb" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider></providers> 
    </entityFramework> 
<system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
    </system.data></configuration> 
+0

データアクセスコードはコントロールに組み込まれていますか?コントロールクラスは、それがあるフォームと同じプロジェクトで宣言されていますか? – jmcilhinney

+0

コントロールに組み込まれています。コントロールクラスは同じプロジェクト内にあります。 – Kayot

答えて

0

問題を処理するのではなく、わかります。私は、カスタムコントロールの負荷に

If (System.ComponentModel.LicenseManager.UsageMode = System.ComponentModel.LicenseUsageMode.Designtime) Then 
     Load_Question() 
    End If 

を入れ This Stack Article の答えを見つけました。私は設計時に質問をしません。これは私にとっては大丈夫です。私の他の選択肢は、接続文字列をEFクラスに入れることでした。これは、最初にコードではなくEF-Designを使用しているので、維持が困難です。

関連する問題