###前提・実現したいこと
C#(WPF)+EntityFramework6を使ってシステムの試作を行っています。
DBにはSQLServerCompactを使用
ビルドでき、実行すればDBに接続した画面表示は問題なく行えています。
ですが、デザイナー画面がエラー表示になり、デザインが表示されません。
###デザイナに表示されるエラーメッセージ
MetadataException: 指定されたスキーマが無効です。エラー: (0,0) : エラー 0152: ADO.NET プロバイダーに、不変名が 'System.Data.SqlServerCe.4.0' の Entity Framework プロバイダーがありません。アプリケーションの構成ファイルの "entityFramework" セクションにプロバイダーが登録されていることを確認してください。詳細については、http://go.microsoft.com/fwlink/?LinkId=260882 を参照してください。
原因は、デザインに貼り付けているUserControlで、UserControlのLoadedイベント中でEntityFramework経由でデータ取得を行っているところで、処理をコメントアウトするとデザイナーは表示されます。
実行自体はできることから、デザイン時にのみ情報が取得できないのだと推測しています。
###App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="Hoge.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> <parameters> <parameter value="System.Data.SqlServerCe.4.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> </providers> </entityFramework> <connectionStrings> <!-- コンテキストのクラス名と同じ名前で接続文字列を作成する --> <add name="HogeDbContext" connectionString="Data Source=c:\HogeLocalDB.sdf;Password=hoge" providerName="System.Data.SqlServerCe.4.0" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <system.data> <DbProviderFactories> <remove invariant="System.Data.SqlServerCe.4.0" /> <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </DbProviderFactories> </system.data></configuration>
###試したこと
UserControlのコンストラクタに
var y = typeof(System.Data.Entity.SqlServerCompact.SqlCeProviderServices);
やvar instanceCe = SqlCeProviderServices.Instance;等と書いてみましたが変化ありません。
何か原因、対策方法などお分かりにならないでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/27 07:43